题目背景
高精度乘法模板题。
题目描述
给出两个非负整数,求它们的乘积。
输入格式
输入共两行,每行一个非负整数。
输出格式
输出一个非负整数表示乘积。
输入输出样例
输入
1 2
输出
2
说明/提示
每个非负整数不超过 10^2000。
#include <iostream>
#include <string>
using namespace std;
string multiplyStrings(const string& num1, const string& num2) {
int len1 = num1.size();
int len2 = num2.size();
string result(len1 + len2, '0');
for (int i = len1 - 1; i >= 0; i--) {
int carry = 0;
for (int j = len2 - 1; j >= 0; j--) {
int temp = (num1[i] - '0') * (num2[j] - '0') + (result[i + j + 1] - '0') + carry;
result[i + j + 1] = temp % 10 + '0';
carry = temp / 10;
}
result[i] += carry;
}
//remove leading zeros
size_t startPos = result.find_first_not_of('0');
if (startPos != string::npos) {
return result.substr(startPos);
}
return "0";
}
int main()
{
string num1, num2;
cin >> num1 >> num2;
string product = multiplyStrings(num1, num2);
cout << product << endl;
return 0;
}
注意:
1.这道题和上一道A+B的有些相似,都是从两个数的最后一位开始乘,不过这道题比上一道要复杂一些,在计算完成之后,需要去除result前面的0