#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;
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;
{
if (multiply(a, b) != a * b)
{
"ERROR:\n"
"my: %u\n"
"norm: %u\n"
"\n",
multiply(a, b), a * b
);
}
if (USHRT_MAX == a)
{
b++;
}
a++;
} while ( (a != 0) && (b != 0) );
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGxpbWl0cy5oPgoKdW5zaWduZWQgaW50IG11bHRpcGx5ICh1bnNpZ25lZCBzaG9ydCBhLCB1bnNpZ25lZCBzaG9ydCBiKQp7CiAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CiAgY2hhciBuOwogIAogIGZvciAobiA9IDA7IGIgJiAoMSA8PCBuKTsgbisrKQogIHsKICAgIGlmICggYiAmICgxIDw8IG4pICkKICAgICAgcmVzdWx0ICs9IGEgPDwgbjsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKaW50IG1haW4odm9pZCkKewoKICB1bnNpZ25lZCBzaG9ydCBhLCBiOwogIGEgPSAwOwogIGIgPSAwOwoKICB7CiAgICBpZiAobXVsdGlwbHkoYSwgYikgIT0gYSAqIGIpCiAgICB7CiAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAiRVJST1I6XG4iCiAgICAgICAgICAgICAgICJteTogJXVcbiIKICAgICAgICAgICAgICAgIm5vcm06ICV1XG4iCiAgICAgICAgICAgICAgICJcbiIsCiAgICAgICAgICAgICAgIG11bHRpcGx5KGEsIGIpLCBhICogYgogICAgICAgICAgICAgKTsKICAgIH0KICAgIGlmIChVU0hSVF9NQVggPT0gYSkKICAgIHsKICAgICAgYisrOwogICAgfQogICAgYSsrOwoKICB9IHdoaWxlICggKGEgIT0gMCkgJiYgKGIgIT0gMCkgKTsKICAKICBwcmludGYoIkRvbmUhIik7CgogIHJldHVybiAwOwp9Cg==