具体见代码
0需特判!!!
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<iostream> 5 using namespace std; 6 7 struct bignum{ 8 int y[50005]; 9 //全部倒存 10 bignum() 11 {memset(y,0,sizeof(y));} 12 13 bignum operator * (const bignum x) const 14 { 15 if((y[0]==1 and y[1]==0)or(x.y[0]==1 and x.y[1]==0)) 16 { 17 bignum re;re.y[0]=1,re.y[1]=0; 18 return re; 19 }//本算法的唯一缺陷在于要特判0 20 bignum re;re.y[0]=y[0]+x.y[0]-1; 21 //初始化位数表示无进位时的最小长度 22 for(int i=1;i<=y[0];i++) 23 for(int j=1;j<=x.y[0];j++) 24 re.y[i+j-1]+=y[i]*x.y[j]; 25 //由于我是从1开始计算位数的 26 //所以是i+j-1 27 for(int i=1;i<re.y[0];i++) 28 if(re.y[i]>9) re.y[i+1]+=re.y[i]/10,re.y[i]%=10; 29 //进位 30 while(re.y[re.y[0]+1]) re.y[0]++; 31 32 return re; 33 } 34 }; 35 36 string b1,b2; 37 bignum q,w,c; 38 39 int main() 40 { 41 cin>>b1>>b2; 42 q.y[0]=b1.size(),w.y[0]=b2.size(); 43 for(int i=0;i<q.y[0];i++) q.y[i+1]=b1[i]-'0'; 44 for(int i=0;i<w.y[0];i++) w.y[i+1]=b2[i]-'0'; 45 reverse(q.y+1,q.y+1+q.y[0]); 46 reverse(w.y+1,w.y+1+w.y[0]); 47 48 c=q*w; 49 50 reverse(c.y+1,c.y+1+c.y[0]); 51 for(int i=1;i<=c.y[0];i++) printf("%d",c.y[i]); 52 return 0; 53 }