Decimal is base-10. That means that there's 10 different symbols you can put together to create a number: 1234567890.
Binary is base-2, with just two different symbols: 10.
What would base-1 be? It's Unary: 1.
Let's take decimal 4.
In binary that's 100.
Unary is even easier to learn than binary. It's 1111.
Let's represent a unary integer as a String: "11111"
(five)
How do we convert a unary integer to a (binary / decimal) int?
(reminder: java has a REPL /usr/lib/jvm/java-*-openjdk/bin/jshell
)
"11111".length() == 5;
(hover over or highlight the code to reveal spoilers)
Next, let's do addition.
"1111" + "11"
should equal "111111"
(six).
"1111" + "11" == "111111"; // string concatination // it's that simple
Subtraction is a little harder.
"1111" - "111" == "1"
"1111".replaceFirst("111", "") == "1";
How about some enlightenment?
Let's implement multiplication and division at the same time.
If you aren't using the spoilers at this point,
"1111" * "11" == "11111111"
(eight) and "11111111" / "11" == "1111"
// multiply "1111".replace("1", "11") == "11111111"; // divide "11111111".replace("11", "1") == "1111";
If you looked at the above spoiler, there is a bug with division.
What is it?
This implementation has a bug with division.
If the number isn't cleanly divisible with the divisor, the remainer will be added to the result.
It's simple to fix this by writing a for/while loop, but is there a function in the standard library that fixes this?
If you did multiplication and division the same way I did, fractional multiplication is the next step.
"111".replace("111", "11") == "11" "111111".replace("111", "11") == "1111" // multiplication by two thirds // division is actually multiplication by a fraction
What would a square function look like?
What would a exp function look like?
There is a way to represent zero. Would the functions you wrote work with this representation?
Is there a way to represent negative numbers while keeping all operations one-liners?