Imports System
'
' 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:
'
' 18
' 28 36 x
' 14 72 x
' 7 144
' 3 288
' 1 576
' Sum the remaining numbers in the right-hand column:
' 18
' 28 -
' 14 -
' 7 162
' 3 288
' 1 576
' ====
' 1026
'
Module EthiopianMultiplication
Function EthiopianMultiply(a As Integer, b As Integer) As Integer
Dim sum As Integer = 0
While a > 0
If a Mod 2 = 1 Then ' keep only odd rows
sum += b
Console.WriteLine("sum = " & sum)
End If
a = a \ 2 ' halve left side
b = b * 2 ' double right side
Console.WriteLine("a = " & a & " b = " & b)
End While
Return sum
End Function
Sub Main()
Dim a As Integer = 57
Dim b As Integer = 18
Console.WriteLine(EthiopianMultiply(a, b))
End Sub
End Module
'
' 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
'