洛谷1303
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 }