How to calculate the Ethiopian multiplication in C++

1 Answer

0 votes
#include <iostream>

/*
Example: 57 * 18

    57      18
Halving the first column:

    28      18
    14      
     7      
     3 
     1
Doubling the second column:

    28       36
    14       72
     7      144
     3      288
     1      576
Remove rows whose first cell is even:

    28       36 x 
    14       72 x
     7      144
     3      288
     1      576
Sum the remaining numbers in the right-hand column:

    28        - 
    14        - 
     7      162
     3      288
     1      576
           ====
           1026
*/

int ethiopianMultiply(int a, int b) {
    int sum = 0;

    while (a > 0) {
        if (a % 2 == 1) {   // keep only odd rows
            sum += b;
            std::cout << "sum = " << sum << std::endl;  
        }
        a /= 2;            // halve left side
        b *= 2;            // double right side
        std::cout << "a = " << a << " b = " << b << std::endl;
    }

    return sum;
}

int main() {
    int a = 57;
    int b = 18;

    std::cout << ethiopianMultiply(a, b) << std::endl;  
}



/*
run:

sum = 18
a = 28 b = 36
a = 14 b = 72
a = 7 b = 144
sum = 162
a = 3 b = 288
sum = 450
a = 1 b = 576
sum = 1026
a = 0 b = 1152
1026

*/

 



answered Mar 17 by avibootz
edited Mar 17 by avibootz
...