大數乘法
阿新 • • 發佈:2017-09-10
strlen ostream tex pan 從後往前 space ont blog tro
給出2個大整數A,B,計算A*B的結果。
Input第1行:大數A
第2行:大數B
(A,B的長度 <= 1000,A,B >= 0)
Output
輸出A * B
Input示例
123456
234567
Output示例
28958703552
解法:
第i位數乘第j位數,乘積是第i+j位數(從0開始)
如123*456
乘積各位數為
個位 3*6
十位 2*6 + 3*5
百位 2*5 + 1*6 + 3*4
千位 1*5 + 2*4
萬位 1*4
然後從後往前,取余更新。
1 #include <iostream>
2 #include <string .h>
3
4 using namespace std;
5
6 char A1[1003],B1[1005];
7 int A[1010]={0},B[1010]={0},C[2020]={0};
8
9 int main()
10 {
11 int len1,len2;
12 cin>>A1>>B1;
13 len1 = strlen(A1);
14 len2 = strlen(B1);
15
16 for(int i = 0;i <len1;i++)
17 A[len1-i-1] = A1[i] - ‘0‘ ;
18 for(int i = 0;i <len2;i++)
19 B[len2-i-1] = B1[i] - ‘0‘;
20
21
22
23 for(int i = 0;i < 1010;i++)
24 for(int j = 0;j <1010;j++)
25 {
26 C[i+j] += A[i]*B[j];
27 }
28
29 for(int i = 0;i < 2020-1;i++)
30 {
31 C[i+1] += C[i] / 10 ;
32 C[i] = C[i] % 10;
33 }
34
35 int t = 2020;
36 while(C[t]==0)
37 t--;
38
39 for(int i = t;i>=0;i--)
40 cout<<C[i];
41 cout<<endl;
42
43 return 0;
44 }
大數乘法