Given two non-negative integers num1
and num2
represented as strings, return the product of num1
and num2
, also represented as a string.
Example 1:
Input: num1 = "2", num2 = "3" Output: "6"
Example 2:
Input: num1 = "123", num2 = "456" Output: "56088"
/* 大数相乘 结果最大位数为3+2=5位
* 1 2 3 i
* 4 5 j
* -----------
* 1 5 i=2,j=1 1->i+j 5->i+j+1
* 1 0 这里用10+1 作为本部计算的结果
* 0 5
* 1 2
* 0 8
* 0 4
* */
class Solution {
public:
string multiply(string num1, string num2) {
// 结果最大有num1.len+num2.len 注意最后去掉前面的前导0
string ans="";
vector<int> val(num1.length()+num2.length(),0);
for(int i=num1.length()-1;i>=0;i--){
for(int j=num2.length()-1;j>=0;j--){
int p1=i+j, p2=i+j+1;
int mulval = (num1[i]-'0')*(num2[j]-'0')+val[p2];
val[p2] = mulval%10;
val[p1] += mulval/10;
}
}
// 去掉前导0 如果都是0 就返回零
for(int &x:val){
if(!ans.empty() || x!=0) ans.push_back(x+'0'); //push_back加入一个char 使用+时加""
}
return ans.empty() ? "0" : ans;
}
};