【OJ】大整数乘法

思路:普通的每一位相乘,再相加。

利用string类的insert成员函数向后添加运算结果。注意字符运算和整型运算的区别。

 1 #include <iostream>
 2 using namespace std;
 3 int main(){
 4     string a, b, c[200];
 5     int ans[401] = {0};
 6     int tmp, up = 0, k = 0, max_length;
 7     cin >> a >> b;
 8     for (int i = a.length() - 1; i >= 0; --i){
 9         c[k].insert(c[k].length(), k, '0');
10         for (int j = b.length() - 1; j >= 0; --j){
11             tmp = (a[i] - '0') * (b[j] - '0') + up;
12             up = tmp / 10;
13             tmp = tmp % 10;
14             c[k].insert(c[k].length(), 1, (char)(tmp + '0'));
15         }
16         if (up != 0){
17             c[k].insert(c[k].length(), 1, (char)(up + '0'));
18             up = 0;
19         }
20         max_length = (max_length > c[k].length()) ? (max_length) : (c[k].length());
21         k++;
22     }
23     tmp = 0;
24     up = 0;
25     for (int i = 0; i < max_length; ++i){
26         for (int j = 0; j < k; ++j){
27             if (c[j].length() <= i)
28                 continue;
29             ans[i] += c[j][i] - '0';
30         }
31         ans[i] += up;
32         up = ans[i] / 10;
33         ans[i] %= 10;
34     }
35     if (up != 0)
36         cout << up;
37     for (int i = max_length - 1; i >= 0; --i)
38         cout << ans[i];
39     cout << endl;    
40     return 0;
41 }

猜你喜欢

转载自www.cnblogs.com/victorique-de-blois/p/11592602.html