#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)
    
    
      fprintf(stderr,
               "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);
  printf("Done!\n");
 
  return 0;
}