#include <stdio.h>
#include <stdint.h>
uint16_t mul(uint16_t a, uint16_t b) {
uint16_t res = 0;
if (!a || !b) {
return 0;
}
while (a) {
res <<= 1;
if (a & 1) {
res += b;
}
a >>= 1;
}
return res;
}
void example_mul(uint16_t a, uint16_t b) {
printf("%d*%d = %d\n", a
, b
, mul
(a
, b
)); }
int main() {
example_mul(5, 6);
example_mul(7, 4);
example_mul(3, 21);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KCnVpbnQxNl90IG11bCh1aW50MTZfdCBhLCB1aW50MTZfdCBiKSB7CiAgdWludDE2X3QgcmVzID0gMDsKCiAgaWYgKCFhIHx8ICFiKSB7CiAgICByZXR1cm4gMDsKICB9CgogIHdoaWxlIChhKSB7CiAgICByZXMgPDw9IDE7CiAgICBpZiAoYSAmIDEpIHsKICAgICAgcmVzICs9IGI7CiAgICB9CiAgICBhID4+PSAxOwogIH0KICByZXR1cm4gcmVzOwp9Cgp2b2lkIGV4YW1wbGVfbXVsKHVpbnQxNl90IGEsIHVpbnQxNl90IGIpIHsKICBwcmludGYoIiVkKiVkID0gJWRcbiIsIGEsIGIsIG11bChhLCBiKSk7Cn0KCmludCBtYWluKCkgewogIGV4YW1wbGVfbXVsKDUsIDYpOwogIGV4YW1wbGVfbXVsKDcsIDQpOwogIGV4YW1wbGVfbXVsKDMsIDIxKTsKICByZXR1cm4gMDsKfQo=