Jump to content

Ethiopian multiplication: Difference between revisions

No edit summary
Line 174:
=={{header|Aime}}==
{{trans|C}}
<lang aime></lang>oid
halve(integer &x)
{
x >>= 1;
}
 
void
double(integer &x)
{
x <<= 1;
}
 
integer
iseven(integer x)
{
return (x & 1) == 0;
}
 
integer
ethiopian(integer plier, integer plicand, integer tutor)
{
integer result;
 
result = 0;
 
if (tutor) {
o_text("ethiopian multiplication of ");
o_integer(plier);
o_text(" by ");
o_integer(plicand);
o_text("\n");
}
 
while (plier >= 1) {
if (iseven(plier)) {
if (tutor) {
o_winteger(4, plier);
o_space(1);
o_winteger(6, plicand);
o_text(" struck\n");
}
} else {
if (tutor) {
o_winteger(4, plier);
o_space(1);
o_winteger(6, plicand);
o_text(" kept\n");
}
 
result += plicand;
}
 
halve(plier);
double(plicand);
}
 
return result;
}
 
integer
main(void)
{
o_integer(ethiopian(17, 34, 1));
o_byte('\n');
 
return 0;
}</lang>
{{out}}
<pre></pre> 17 34 kept
8 68 struck
4 136 struck
2 272 struck
1 544 kept
578</pre>
 
=={{header|ALGOL 68}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.