|
发表于 2012-5-20 18:14:03
|
显示全部楼层
难得糊涂 发表于 2012-5-21 22:51
如果除数也是大数呢,也就是两个大数相除,可以显示商与余数,谢谢啊,纠结了好久!~ - // 利用的是长除法的原理
- void div(int a[100], int b[100], int c[100])
- {
- int t[100];
-
- for (int i=100-1; i>=0; i--)
- for (int k=9; k>0; k--) // 尝试商数
- {
- mul(b+i, k, t);
- if (largerthan(a+i, t))
- {
- sub(a+i, t, c+i);
- break;
- }
- }
- }
- void mul(int a[100], int b, int c[100])
- {
- for (int i=0; i<100; i++)
- c[i] = a[i] * b;
-
- for (int i=0; i<100-1; i++) // 一口气进位
- {
- c[i+1] += c[i] / 10;
- c[i] %= 10;
- }
- }
- void sub(int a[100], int b[100], int c[100])
- {
- for (int i=0; i<100; i++)
- c[i] = a[i] - b[i];
-
- for (int i=0; i<100-1; i++) // 一口气借位和补位
- if (c[i] < 0)
- {
- c[i+1]--; // 借位
- c[i] += 10; // 补位
- }
- }
复制代码 详细权威方案可以参考GMP的源代码,已经帮您分享出来:
http://bbs.fishc.com/thread-17779-1-1.html
|
|