#define N 10000 void mpMul(int *ret, int *a, int *b) { int i, j; int la, lb; int *aa; int ca; long x; la = *a; lb = *b; if (la == 0 || lb == 0) { *ret = 0; return; } for (i = la + lb; i > 0; i--) *(ret + i) = 0; for (j = 1; j <= lb; j++) { ca = 0; b++; for (i = 1, aa = a; i <= la; i++) { x = *++aa; x = x * *b + *(ret + i + j - 1) + ca; *(ret + i + j - 1) = x % N; ca = x / N; } *(ret + i + j - 1) = ca; } *ret = (ca != 0) ? la + lb : la + lb - 1; }