大数乘大数
#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]='