原题:
Given two non-negative integers
num1
andnum2
represented as strings, return the product ofnum1
andnum2
, also represented as a string.Example 1:
Input: num1 = "2", num2 = "3" Output: "6"Example 2:
Input: num1 = "123", num2 = "456" Output: "56088"Note:
- The length of both
num1
andnum2
is < 110.- Both
num1
andnum2
contain only digits0-9
.- Both
num1
andnum2
do not contain any leading zero, except the number 0 itself.- You must not use any built-in BigInteger library or convert the inputs to integer directly.
就是字符串相乘,结果:
Success
Runtime: 12 ms, faster than 34.03% of C++ online submissions for Multiply Strings.
Memory Usage: 12.1 MB, less than 12.82% of C++ online submissions for Multiply Strings.
class Solution {
public:
string multiply(string num1, string num2) {
vector<string> product;
int zero=0;
for(int i=num1.size()-1;i>=0;i--){
string temp="";
int up=0;
for(int j=num2.size()-1;j>=0;j--){
int pd=(num1[i]-'0')*(num2[j]-'0')+up;
if(pd>=10){up=pd/10;temp+='0'+pd%10;}
else {temp+=pd+'0';up=0;}
}
if(up){temp+=up+'0';}
reverse(temp.begin(),temp.end());
for(int n=0;n<zero;n++){temp+='0';}
zero++;
product.push_back(temp);
}
zero=product[product.size()-1].size();
int up=0;
string re="";
for(int i=0;i<zero;i++){
int sum=up;
up=0;
for(int j=0;j<product.size();j++){
int size=product[j].size()-1;
if(size-i<0){continue;}
sum+=product[j][size-i]-'0';
}
if(sum>=10){up=sum/10;}
re+=sum%10+'0';
}
if(up){re+='0'+up;}
int cnt=0;
reverse(re.begin(),re.end());
for(string::iterator it=re.begin();it!=re.end()-1;){
if(*it=='0'){cout<<cnt;re.erase(it);}
else {break;}
}
return re;
}
};