1. 程式人生 > >大數乘法

大數乘法

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 }

大數乘法