| 
 | 
 
 
发表于 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 
 |   
 
 
 
 |