21 lines
584 B
Plaintext
21 lines
584 B
Plaintext
local fn Doubled( n as long ) : end fn = n * 2
|
|
local fn Halved( n as long ) : end fn = int( n / 2 )
|
|
local fn IsEven( n as long ) : end fn = ( n mod 2 ) - 1
|
|
|
|
local fn EthiopianMultiply( x as long, y as long )
|
|
long sum = 0, sign = x
|
|
printf @"Ethiopian multiplication of %3ld x %3ld = \b", x, y
|
|
do
|
|
if not ( fn IsEven( x ) ) then sum += y
|
|
x = fn Halved( x ) : y = fn Doubled( y )
|
|
until ( x == 0 )
|
|
if sign < 0 then sum *= - 1
|
|
printf @"%4ld", sum
|
|
end fn
|
|
|
|
fn EthiopianMultiply( 17, 34 )
|
|
fn EthiopianMultiply( -17, 34 )
|
|
fn EthiopianMultiply( -17, -34 )
|
|
|
|
HandleEvents
|