Ethiopian multiplication

Problem Explanation

Ethiopian multiplication is a method of multiplying integers using only addition, doubling, and halving. Implement the Ethiopian multiplication algorithm.

Solutions

Solution 1 (Click to Show/Hide)
``````function eth_mult(a, b) {
// required functions
const halve = (n) => Math.floor(n/2);
const double = (n) => n + n;
const isEven = (n) => n % 2 === 0;

// setup variables
let [left, right] = [a, b].sort((a, b) => a - b);
let total = isEven(left) ? 0 : right;

// Ethiopian algorithm
while (left > 1) {
left = halve(left);
right = double(right);
if (!isEven(left))
total += right;
}

// return result
}
``````

Code Explanation

• The `halve()`, `double()`, and `isEven()` functions are set up as required.
• The code then iterates until the smaller (left) value is `1`, adding the larger (right) value to the running total whenever the smaller (left) value is odd
Solution 2 (Click to Show/Hide)
``````const halve = (n) => Math.floor(n/2);
const double = (n) => n + n;
const isEven = (n) => n % 2 === 0;

function eth_mult(a, b) {
return a > 1 ? (eth_mult(halve(a), double(b)) + (isEven(a) ? 0 : b)) : b;
}
``````

Code Explanation

• This solution uses recursion to accomplish the same logic as Solution 1