#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
unsigned int multiply (unsigned short a, unsigned short b)
{
register unsigned int result = 0;
char n = 0;
for (n = 0; b >= (1 << n); n++)
{
if ( b & (1 << n) )
result += a << n;
}
return result;
}
int main(void)
{
unsigned short a, b;
a = 0;
b = 0;
do
{
if (multiply(a, b) != a * b)
"ERROR:\n"
"my: %u\n"
"norm: %u\n"
"%hu * %hu\n"
"\n",
multiply(a, b), (a * b),a, b
);
if (USHRT_MAX == a)
{
b++;
}
a++;
//fprintf(stderr, "%hu * %hu\n", a, b);
} while ( ( a != 0 ) || (b != 0) );
fprintf(stderr
, "%hu * %hu\n", a
, b
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGxpbWl0cy5oPgogCnVuc2lnbmVkIGludCBtdWx0aXBseSAodW5zaWduZWQgc2hvcnQgYSwgdW5zaWduZWQgc2hvcnQgYikKewogIHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXN1bHQgPSAwOwogIGNoYXIgbiA9IDA7CiAgCiAgZm9yIChuID0gMDsgYiA+PSAoMSA8PCBuKTsgbisrKQogIHsKICAgIGlmICggYiAmICgxIDw8IG4pICkKICAgICAgcmVzdWx0ICs9IGEgPDwgbjsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQogCmludCBtYWluKHZvaWQpCnsKIAogIHVuc2lnbmVkIHNob3J0IGEsIGI7CiAgYSA9IDA7CiAgYiA9IDA7CiAgCiAgZG8KICB7CiAgICBpZiAobXVsdGlwbHkoYSwgYikgIT0gYSAqIGIpCiAgICAKICAgIAogICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgIkVSUk9SOlxuIgogICAgICAgICAgICAgICAibXk6ICV1XG4iCiAgICAgICAgICAgICAgICJub3JtOiAldVxuIgogICAgICAgICAgICAgICAiJWh1ICogJWh1XG4iCiAgICAgICAgICAgICAgICJcbiIsCiAgICAgICAgICAgICAgIG11bHRpcGx5KGEsIGIpLCAoYSAqIGIpLGEsIGIKICAgICAgICAgICAgICk7CgogICAgaWYgKFVTSFJUX01BWCA9PSBhKQogICAgewogICAgICBiKys7CiAgICB9CiAgICBhKys7CiAgLy9mcHJpbnRmKHN0ZGVyciwgIiVodSAqICVodVxuIiwgYSwgYik7CiAgfSB3aGlsZSAoICggYSAhPSAwICkgfHwgKGIgIT0gMCkgKTsKICAKICBmcHJpbnRmKHN0ZGVyciwgIiVodSAqICVodVxuIiwgYSwgYik7CiAgcHJpbnRmKCJEb25lIVxuIik7CiAKICByZXR1cm4gMDsKfQ==