# 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.