【OJ】大整数乘法

匿名 (未验证) 提交于 2019-12-03 00:11:01

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

利用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 }

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!