Anonymous user
Ethiopian multiplication: Difference between revisions
→{{header|Metafont}}: ++ objc
m (→{{header|Haskell}}: added halve and double as task requires) |
(→{{header|Metafont}}: ++ objc) |
||
Line 385:
show( (17 ethiopicmult 34) );
end</lang>
=={{header|Objective-C}}==
Using class methods except for the generic useful function <tt>iseven</tt>.
<lang objc>#import <stdio.h>
#import <objc/Object.h>
BOOL iseven(int x)
{
return (x&1) == 0;
}
@interface EthiopicMult : Object
+ (int)mult: (int)plier by: (int)plicand;
+ (int)halve: (int)a;
+ (int)double: (int)a;
@end
@implementation EthiopicMult
+ (int)mult: (int)plier by: (int)plicand
{
int r = 0;
while(plier >= 1) {
if ( !iseven(plier) ) r += plicand;
plier = [EthiopicMult halve: plier];
plicand = [EthiopicMult double: plicand];
}
return r;
}
+ (int)halve: (int)a
{
return (a>>1);
}
+ (int)double: (int)a
{
return (a<<1);
}
@end
int main()
{
printf("%d\n", [EthiopicMult mult: 17 by: 34]);
return 0;
}</lang>
=={{header|OCaml}}==
|