#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)
    {
      fprintf(stderr,
               "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) );
  
  printf("Done!");

  return 0;
}
