有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。
输入描述:
空格分隔的两个字符串,代表输入的两个大整数
输出描述:
输入的乘积,用字符串表示
输入例子1:
72106547548473106236 982161082972751393
输出例子1:
70820244829634538040848656466105986748
大数乘法问题
简单来说就是把A[i]*B[j]累加放到临时数组的C[i+j]位置。
然后对数组C执行进位加法即可。
剩下的步骤就是字符与数字之间的转换与逆序问题。
参考代码如下:
#include <iostream> #include <string> #include <vector> using namespace std; int main() { string str1, str2; while (cin >> str1 >> str2) { int n1 = str1.size(), n2 = str2.size(); vector<int> v1, v2; // 将两个字符串放入数组中并逆序 for (int i = n1 - 1; i >= 0; --i) { v1.push_back(str1[i] - ‘0‘); } for (int i = n2 - 1; i >= 0; --i) { v2.push_back(str2[i] - ‘0‘); } // 待处理的临时数组 vector<int> v(n1 + n2, 0); for (int i = 0; i < n1; ++i) { for (int j = 0; j < n2; ++j) { v[i + j] += v1[i] * v2[j]; } } // 处理数组中的加法进位 for (int i = 0; i < n1 + n2-1; ++i) { v[i + 1] += (v[i] / 10); v[i] = v[i] % 10; } string res; // 判断最终结果的有效位数 int m = n1 + n2 - 1; if (v[n1 + n2 - 1] == 0) m = n1 + n2 - 2; // 将结果转换为字符串 for (int i = m; i >= 0; --i) { res += (v[i] + ‘0‘); } cout << res << endl; } return 0; }
原文地址:https://www.cnblogs.com/immjc/p/9420387.html
时间: 2024-10-12 17:17:21