Ethiopian multiplication: Difference between revisions

Content added Content deleted
(→‎{{header|D}}: add implementation)
(→‎{{header|D}}: formatting)
Line 214: Line 214:
<lang d>
<lang d>
import std.stdio;
import std.stdio;
int dub(int num) {return num<<1;}
int dub(int num) { return num << 1; }
int halve(int num) {return num>>1;}
int halve(int num) { return num >> 1; }
bool isEven(int num) {return !(num&1);}
bool isEven(int num) { return !(num & 1); }


int ethiopian(int n1,int n2) {
int ethiopian(int n1, int n2) {
int ret = 0;
int ret = 0;
while(n1>=1) {
while(n1 >= 1) {
if (!isEven(n1)) ret += n2;
if (!isEven(n1)) ret += n2;
n1 = halve(n1);
n1 = halve(n1);
n2 = dub(n2);
n2 = dub(n2);
}
}
return ret;
return ret;
}
}


int main() {
int main() {
writefln("17 ethiopian 34 is %d",ethiopian(17,34));
writefln("17 ethiopian 34 is %d", ethiopian(17, 34));
return 0;
return 0;
}
}
</lang>
</lang>