力扣 题目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 }
View Code

 

posted @ 2022-05-05 15:09  无聊的阿库娅  阅读(37)  评论(0编辑  收藏  举报