Dart: Multiply without using the multiplication '*' operator
In this challenge, the task is multiplying two numbers without using the multiplication '*' operator. There are many ways to solve this challenge, and we will learn two of them in this article.
Solution 1: Using a loop
This is the most common solution, and we must understand how multiplication works: multiplying a quantity by a number consists of adding that quantity as many times as the number indicates. So, 4×3 is equal to adding the number 4 three times. In code, it can be expressed as:
final result = 4 + 4 + 4;
If we analyze for a moment, we can see that to solve this problem, we need to use a loop. In this case, the best
option is a for
loop. So, we can create a function called multiply
and have something like this:
num multiply(num a, num b) {
num result = 0;
for (int i = 0; i < b; i++) {
result += a;
}
return result;
}
However, there is an issue with the above code; it only works if both arguments are positive numbers.
We can check if b
is negative if we also need to support negative numbers. In that case, instead of adding, we
will subtract. The code would look like this:
num multiply(num a, num b) {
num result = 0;
bool isNegative = b < 0;
for (int i = 0; i < b.abs(); i++) {
result = isNegative ? result - a : result + a;
}
return result;
}
We use the b.abs()
function in the condition because if b
were negative, the condition would always be false.
Another thing to note is that we do not check if the variable a
is negative because the result is negative when
adding two negative numbers.
You can run the code of the first solution in DartPad. Play with the variables to see different results.
Solution 2: Using rules of fractions
For this solution, one must be familiar with the rules of fractions, specifically the following rule:
What is interesting about this rule is when we substitute the value of b with the number 1. Let's do it:
As we can see, the multiplication of a * c
is equivalent to a/(1/c)
. Now, with all this information, our
multiplication function would look like this:
num multiply(num a, num c) {
return a / (1 / c);
}
However, there is an issue with the above code because any number divided by zero will cause an exception in the
program. Therefore, if c
is zero, we will return 0
as the result. After updating, the code would be as follows:
num multiply(num a, num c) {
return c == 0 ? 0 : a / (1 / c);
}
You can run the code of the second solution in DartPad. Play with the variables to see different results.