高精度乘法模板(luogu1303)
1 //luogu1303,不压位的高精度乘法 2 #include <cstdio> 3 #include <iostream> 4 5 using namespace std; 6 7 const int max_n=4040; 8 9 int a[max_n],b[max_n],c[max_n]; 10 string x,y; 11 12 //字符串转数组(倒序)的函数 13 void swi(string s,int a[]) 14 { 15 for (int i=0;i<max_n;i++) a[i]=0; 16 int n=s.size()-1; 17 for (int i=n;i>=0;i--) 18 { 19 a[0]++; 20 a[a[0]]=s[i]-'0'; 21 } 22 } 23 24 //c=a*b 25 void multiply(int a[],int b[],int c[]) 26 { 27 if (a[0]==1 && a[1]==0 || b[0]==1 && b[1]==0) 28 { 29 c[0]=1;c[1]=0;return; 30 } 31 for (int i=1;i<=a[0]+b[0];i++) c[i]=0; 32 for (int i=1;i<=a[0];i++) 33 for (int j=1;j<=b[0];j++) 34 { 35 c[i+j-1]+=a[i]*b[j]; 36 c[i+j]+=c[i+j-1]/10; 37 c[i+j-1]%=10; 38 } 39 if (c[a[0]+b[0]]==0) c[0]=a[0]+b[0]-1; 40 else c[0]=a[0]+b[0]; 41 } 42 43 //输出c 44 void out(int a[]) 45 { 46 for (int i=a[0];i>0;i--) printf("%d",a[i]); 47 } 48 int main() 49 { 50 cin>>x>>y; 51 swi(x,a);swi(y,b); 52 multiply(a,b,c); 53 out(c); 54 return 0; 55 }