这几天在做一些大于大数方面的问题,由于int和double或者int_64,他们所表示的数的范围都是有限的,所以我们在计算一些大数方面的问题时就不能希望这些数据类型能帮助我们实现算法。。。
刚开始做大数乘法时,我的想法使用char型的数组来存储大数,可是写程序时发现用char数组非常繁琐,既要把字符和数字进行转换,又要考虑大于10的时候会发生溢出,于是越做越气人。。。
后来发现用int型的数组的话就不会有以上的问题,程序实现起来就非常容易了,只是要考虑一些进位的情况、、、
下面是程序代码,用来实现大数的乘法。。。
#include<iostream>#include<string>using namespace std;void cheng(int a[],int b[],int n,int m){ int f[1001]={0}; for(int i=n-1;i>=0;i--) { for(int j=m-1;j>=0;j--) { f[i+j+1]=(f[i+j+1]+(a[i]*b[j])); f[i+j]= f[i+j]+(a[i]*b[j])/10; } } for(i=n+m-1;i>0;i--) { if(f[i]>=10) { f[i-1]=f[i-1]+f[i]/10; f[i]=f[i]; } } if(a[0]*b[0]>=10) { for(i=0;i<=n+m-1;i++) { cout<<f[i]; } } else { for(i=1;i<=n+m-1;i++) { cout<<f[i]; } }}int main(){ char a[1000],b[1000]; int c[1000]={0},d[1000]={0}; while(cin>>a,cin>>b) { int n=0,m=0; for(int i=0;i<strlen(a);i++) { c[i]=a[i]-48; n++; } for(i=0;i<strlen(b);i++) { d[i]=b[i]-48; m++; } cheng(c,d,n,m); cout<<endl; } return 0;}
其实知识点都在那边了,关键是我们怎么合理的运用现在所拥有的条件创造出更好的算法。。。