void mul(int *a, int *b, int *c, int len1, int len2) { int i, j; for (i = 0; i < len1; i++) { for (j = 0; j < len2; j++) { c[i + j] += a[i] * b[j]; if (c[i+j] >= 10) { c[i+j+1] += c[i+j] / 10; c[i+j] = c[i+j] % 10; } } } }
//比较大小,被Division函数调用 int cmp(int *a, int *b, int len1, int len2) { int i, len, result = 0, j; for (i = 0; a[i] == 0; i++); len = len1 - i; if(len < len2) result = -1; else if(len > len2) result = 1; else { for (j = 0; i < len1, j < len2; i++, j++) { if (a[i] > b[j]) { result = 1; break; } if (a[i] < b[j]) { result = -1; break; } } } return(result); }
//两数相除,被Division函数调用 void div(int *a, int *b1, int *c, int len1, int len2) { int i, j, m, n, p, q, b[101], chb[101] = {0}, chlen, result_of_cmp; for (i = 1; i <= len1; i++) { for (j = 1; ;j++) { for (m = 0; m < len2; m++) b[m] = b1[m]; for (m = len2 - 1; m >= 0; m--) b[m] *= j; for (m = len2 - 1; m > 0; m--) { if (b[m] >= 10) { b[m-1] += b[m] / 10; b[m] = b[m] % 10; } } if (b[0] >= 10) { chlen = len2 + 1; chb[0] = b[0] / 10; chb[1] = b[0] % 10; for (n = 2; n < chlen; n++) chb[n] = b[n-1]; } else { chlen = len2; for (n = 0; n < chlen; n++) chb[n] = b[n]; } result_of_cmp = cmp(a, chb, i, chlen); if(result_of_cmp == 0 || result_of_cmp == -1) break; } if(result_of_cmp == 0) c[i-1] = j; else c[i-1] = j - 1; for (p = i - 1, q = len2 - 1; p >= 0 && q >= 0; p--, q--) { a[p] = a[p] - b1[q] * c[i-1]; while (a[p] < 0) { a[p-1]--; a[p] = a[p] + 10; } } } }