#include <stdio.h>

unsigned short muldiv(unsigned short a, unsigned short b, unsigned short c)
{
  unsigned short q = 0;              // the quotient
  unsigned short r = 0;              // the remainder
  unsigned short qn = b / c;
  unsigned short rn = b % c;
  while(a)
    {
      if (a & 1)
        {
	  q += qn;
	  r += rn;
	  if (r >= c)
            {
	      q++;
	      r -= c;
            }
        }
      a  >>= 1;
      qn <<= 1;
      rn <<= 1;
      if (rn >= c)
        {
	  qn++; 
	  rn -= c;
        }
    }
  return q;
}

int main(int argc, char **argv)
{
  unsigned int a = 21000U, b = 5000U, c = 10000U;
  fprintf(stdout, "(%hu * %hu) / %hu = %hu (%u)\n", a, b, c, muldiv(a,b,c), ((unsigned int)a*(unsigned int)b)/(unsigned int)c);
}
