大数乘法模板

2019-04-14 19:42发布

大数乘大数 #include using namespace std; char a[1000],b[1000],c[2000]; void multiplication(char s[]){ int aa[1000],bb[1000]; int cc[2000]; memset(cc,0,sizeof(cc)); memset(bb,0,sizeof(bb)); memset(aa,0,sizeof(aa)); int len1=strlen(a)-1; int len2=strlen(b)-1; int d=0; while(len1>=0){//使得低位到高位 aa[d]=a[len1]-'0'; d++; len1--; } d=0; while(len2>=0){//使得低位到高位 bb[d]=b[len2]-'0'; d++; len2--; } len1=strlen(a)-1; len2=strlen(b); for(int i=0;i<=len1;i++){ int w=0;//进位所用 for(int j=0;j<=len2;j++){//十分巧妙,防止w最后还大于0 int ans=aa[i]*bb[j]+w;//因为i+j是递增的所以直接加上上一次进位的w w=ans/10;//进位改变为向下以为的进位(是这次相乘的进位,待会还行改变,因为相加时也可能照成进位) cc[i+j]+=ans%10;//直接加上赋值 ans=cc[i+j];//保存以待进位 cc[i+j]=cc[i+j]%10;//只取余数 w+=ans/10;//加上相加后的进位数 } } int len3=len1+len2+2; while(cc[len3]==0 && len3>=0) len3--; if(len3<0){ c[0]='0'; c[1]='