【每周例题】力扣 C++ 字符串相乘
字符串相乘
题目

题目分析
1.首先,题目上标出了一条:注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。这就是这道题的难度所在
2.这样子的话,我们可以从手写乘法计算来寻找思路:

①首先我们需要将各位相乘的结果放入数组ansArr中,我们使用双重for循环计算num1与num2相乘
②我们将相乘的结果放入ansArr中,最后再进行进位计算
代码
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string num1, num2;
cin >> num1 >> num2;
//0乘任何数为0
if (num1 == "0" || num2 == "0")
{
cout << "0";
return 0;
}
//计算num1,num2长度
int m = num1.size(), n = num2.size();
vector<int> ansArr(m + n, 0); // 初始化为0
//计算乘法
for (int i = m - 1; i >= 0; i--)
{
int x = num1[i] - '0';
for (int j = n - 1; j >= 0; j--)
{
int y = num2[j] - '0';
int sum = ansArr[i + j + 1] + x * y;
//进位
ansArr[i + j + 1] = sum % 10;
ansArr[i + j] += sum / 10;
}
}
string ans;
bool leadingZero = true; // 用于跳过前导零
for (int i = 0; i < m + n; i++)
{
if (ansArr[i] != 0 || !leadingZero)
{
leadingZero = false;
ans.push_back(ansArr[i] + '0'); // 将整数转换为字符
}
}
cout << ans;
return 0;
}
力扣代码:
class Solution {
public:
string multiply(string num1, string num2)
{
if (num1 == "0" || num2 == "0")
return "0";
int m = num1.size(), n = num2.size();
vector<int> ansArr(m + n, 0); // 初始化为0
for (int i = m - 1; i >= 0; i--)
{
int x = num1[i] - '0';
for (int j = n - 1; j >= 0; j--)
{
int y = num2[j] - '0';
int sum = ansArr[i + j + 1] + x * y;
ansArr[i + j + 1] = sum % 10;
ansArr[i + j] += sum / 10;
}
}
string ans;
bool leadingZero = true; // 用于跳过前导零
for (int i = 0; i < m + n; i++)
{
if (ansArr[i] != 0 || !leadingZero)
{
leadingZero = false;
ans.push_back(ansArr[i] + '0'); // 将整数转换为字符
}
}
return ans;
}
};

浙公网安备 33010602011771号