1. 程式人生 > 其它 >高精度乘法

高精度乘法

洛谷P1303P1303 A*B Problem - 洛谷 | 電腦科學教育新生態 (luogu.com.cn)

方法:陣列模擬

 1 //#include <bits/stdc++.h>
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <algorithm>
 5 #include <cstring>
 6 #include <string>
 7 #include <cmath>
 8 #include <queue>
 9 #include <stack>
10
#include <vector> 11 #define INF 0x3f3f3f3f 12 const int maxn = 250; 13 typedef long long ll; 14 15 using namespace std; 16 17 char s1[2005], s2[2005]; 18 int a[5005], b[5005], c[5006]; 19 int la, lb, lc; 20 int main() { 21 scanf("%s", s1); 22 scanf("%s", s2); 23 la = strlen(s1); 24 lb = strlen(s2);
25 lc = la + lb; //注意 26 for(int i = 0; i < la; i++){ 27 a[la - i] = s1[i] - '0'; 28 29 } 30 for(int i = 0; i < lb; i++){ 31 b[lb - i] = s2[i] - '0'; 32 } 33 for (int i = 1; i <= la; i++){ 34 for (int j = 1; j <= lb; j++){ 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 } 40 41 // if(c[lc] == 0 && lc > 0) lc--; //當出現10000 * 0 時會出現錯誤 42 while(c[lc] == 0 && lc > 1){ 43 lc--; 44 } 45 for (int i = lc; i > 0; i--){ 46 printf("%d", c[i]); 47 } 48 49 return 0; 50 }