高精度乘法
阿新 • • 發佈:2021-10-30
洛谷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 }