1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| int cmp(int a[], int b[], int last, int len) { if (a[last+len] != 0) return true;
for (int i = len; i > 0; i--) { if (a[i+last-1] > b[i]) return true; if (a[i+last-1] < b[i]) return false; }
return true; }
void div(string a, string b) { int lena = a.length(), lenb = b.length(), lenc = lena - lenb + 2, lend = max(lena, lenb) + 1;
memset(na, 0, sizeof(na)); memset(nb, 0, sizeof(nb)); memset(nc, 0, sizeof(nc)); memset(nd, 0, sizeof(nd));
for (int i = 1; i <= lena; i++) na[i] = a[lena-i] - '0', nd[i] = na[i]; for (int i = 1; i <= lenb; i++) nb[i] = b[lenb-i] - '0';
for (int i = lena - lenb + 1; i > 0; i--) {
while (cmp(nd, nb, i, lenb)) { for (int j = 1; j <= lenb; j++) { nd[i+j-1] -= nb[j]; if (nd[i+j-1] < 0) { nd[i+j]--; nd[i+j-1] += 10; } }
nc[i]++; } }
while (nc[--lenc] == 0); if (lenc <= 0) lenc++; for (int i = lenc; i > 0; i--) { cout << nc[i]; }
cout << endl;
while (nd[--lend] == 0); if (lend <= 0) lend++; for (int i = lend; i > 0; i--) { cout << nd[i]; }
cout << endl; }
|