力扣 题目43--字符串相乘
题目
题解(方法来自力扣评论区大佬)
由于这个方法比较难以理解先跟着代码走一步看看吧 以 123*6为例
最后删掉0就是答案
那么思路就有点清楚了 其实就是乘法展开了
1.先拆成一个一个数 然后两个数相乘
2.得到的结果要与之前对应位数的值相加
3.得到的数/10就是进位
4.得到的数%10就是目前该位数的结果
代码
1 #include<iostream> 2 #include<string> 3 #include<vector> 4 using namespace std; 5 6 class Solution { 7 public: 8 string multiply(string num1, string num2) { 9 int n1 = num1.length() - 1; 10 int n2 = num2.length() - 1; 11 if (n1 < 0 || n2 < 0) 12 { 13 return ""; 14 } 15 vector<int>mul; 16 mul.resize(n1 + n2 + 2); 17 for (int i = n1; i >= 0; --i) { 18 for (int j = n2; j >= 0; --j) { 19 int bitmul = (num1[i] - '0') * (num2[j] - '0'); 20 bitmul += mul[i + j + 1]; 21 mul[i + j] += bitmul / 10; 22 mul[i + j + 1] = bitmul % 10; 23 } 24 } 25 string sb=""; 26 int i = 0; 27 while (i < mul.size() - 1 && mul[i] == 0) { 28 i++; 29 } 30 for (; i < mul.size(); ++i) { 31 sb += to_string(mul[i]); 32 } 33 return sb; 34 } 35 }; 36 37 int main() { 38 Solution sol; 39 string num1 = "123"; 40 string num2 = "456"; 41 string add=sol.multiply(num1,num2); 42 //string add=sol.multiply(num1, num2); 43 cout << add << endl; 44 }