思路:普通的每一位相乘,再相加。
利用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 }