字符串相乘
题目
题目分析
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; } };
标签:ansArr,num1,num2,int,sum,C++,力扣,相乘,例题 From: https://www.cnblogs.com/hcrzhi/p/18212734