大数相乘 51nod 1027 水题

给出2个大整数A,B,计算A*B的结果。
 
Input
第1行:大数A
第2行:大数B
(A,B的长度 <= 1000,A,B >= 0)
Output
输出A * B
Input示例
123456
234567
Output示例
28958703552

把两个数倒序放在数组里,
然后算第一个数乘以一到九的值
再通过位数去加在一起
具体看程序
 1 #include <iostream>
 2 using namespace std;
 3 #include<string.h>
 4 #include<set>
 5 #include<stdio.h>
 6 #include<math.h>
 7 #include<queue>
 8 #include<map>
 9 #include<algorithm>
10 #include<cstdio>
11 #include<cmath>
12 #include<cstring>
13 #include <cstdio>
14 #include <cstdlib>
15 #include<stack>
16 #include<vector>
17 int a[1010];
18 int b[1010];
19 int c[10][10100];
20 int d[1010000];
21 char a1[1010];
22 char b1[1010];
23 int lena,lenb;
24 int  cheng(int n)
25 {
26     int TM=0;
27     int i;
28     for(i=0;i<lena||TM!=0;i++)
29     {
30         c[n][i]=(a[i]*n+TM)%10;
31         TM=(a[i]*n+TM)/10;
32         //cout<<TM<<"_"<<endl;
33     }
34     //for(--i;i>=0;i--)
35         //cout<<c[n][i];
36     //cout<<endl;
37 }
38 int jia(int n,int x)
39 {
40     int TM=0;
41     int i;
42     int j;
43     for(i=0,j=x;c[n][i]!=-1;i++,j++)
44     {
45         int temp=(TM+c[n][i]+d[j]);
46         d[j]=temp%10;
47         TM=temp/10;
48     }
49     if(TM!=0)
50         d[j++]=1;
51     return j;
52 }
53 int main()
54 {
55             memset(a,0,sizeof(a));
56     memset(b,0,sizeof(b));
57     memset(c,-1,sizeof(c));
58     memset(d,0,sizeof(d));
59     cin>>a1>>b1;
60     lena=strlen(a1);
61     lenb=strlen(b1);
62     int add=0;
63     for(int i=lena-1;i>=0;i--)
64         a[add++]=a1[i]-'0';
65     add=0;
66      for(int i=lenb-1;i>=0;i--)
67         b[add++]=b1[i]-'0';
68     for(int i=1;i<10;i++)
69         cheng(i);
70     for(int i=0;i<lenb-1;i++)
71         jia(b[i],i);
72     int temp=jia(b[lenb-1],lenb-1);
73     for(int i=temp-1;i>=0;i--)
74         cout<<d[i];
75     cout<<endl;
76     return 0;
77 }
View Code

 

posted @ 2017-09-09 19:42  小小超plus  阅读(175)  评论(0编辑  收藏  举报