高精度之大数乘大数

2014-11-23 21:55:27 · 作者: · 浏览: 6

上一篇说了简单的大数乘以小数的问题,绝大多数的问题解决不了。

现在我们来说一下大数乘以大数。

大数乘以大数也是用来模拟手算。

举个例子吧!

\

先从个位开始一个一个的乘 乘完个位然后再乘十位,乘十位的时候要和个位的想成的结果相加。

这里注意乘十位的时候 就不要和乘个位数字的结果中的最后一位相加了 。就是如图搓位。

就是这样 。< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+z8LD5s/IzPnJz87StcS0+sLroaM8L3A+CjxwPjxwcmUgY2xhc3M9"brush:java;">#include #include using namespace std; void mult(char a[],char b[]) { int alen = strlen(a); int blen = strlen(b); if(alen%2) { for(int i=0;i<=alen/2;i++) { int t = a[i]-'0'; a[i]=a[alen-1-i]-'0'; a[alen-1-i]=t; } } else { for(int i=0;i =0;i--) { cout< >a>>b; char c[100]; mult(a,b); } system("pause"); return 0; }
代码很长主要是中间处理两个数组的时候我费了很多劲,这里完全可以不用这么做,重新开辟一个数组很方便的。代码很短。主要看中间想成的那部分代码。

下面我贴上模板中的代码,我没有看懂,因为我看到代码处理时用到了二维数组,我觉得二维数组局限性就大了,比如位数不能太多等等。所以我就没仔细研究。

看以看看模板中怎么处理的数组,把我的那部分替换掉。

#include
  
   
#include
   
     using namespace std; void mult(char a[],char b[],char s[]) { int i,j,k=0,alen,blen,sum=0,res[65][65]={0},flag=0; char result[65]; alen=strlen(a);blen=strlen(b); for(i=0;i
    
     =0;i--) { for(j=blen-1;j>=0;j--) { sum=sum+res[i+blen-j-1][j]; cout<
     
      =0;i--) { for(j=0;j<=i;j++) sum=sum+res[i-j][j]; result[k]=sum%10; k=k+1; sum=sum/10; } if(sum!=0){result[k]=sum;k=k+1;} for(i=0;i
      
       =0;i--) s[i]=result[k-1-i]; s[k]='\0'; while(1) { if(strlen(s)!=strlen(a)&&s[0]=='0') strcpy(s,s+1); else break; } } int main() { char a[50],b[50]; cin>>a>>b; char c[100]; mult(a,b,c); cout<
       
        
好了!

感谢自己坚持。