Given two numbers represented as strings, return multiplication of the numbers as a string.
Note: The numbers can be arbitrarily large and are non-negative.
Subscribe to see which companies asked this question
分析:
转换为数字直接相乘会有溢出等很多问题。按照数学乘法的步骤,设置进位等。
注意目标字符串的长度管理。
代码:
class Solution {
public:
string multiply(string num1, string num2) {
int len=num1.size()+num2.size();
string sum(len,'0');
int carry=0;
for(int i=num1.size()-1;i>=0;--i)
{
int j=num2.size()-1;
for(;j>=0;--j)
{
int temp=(sum[i+j+1]-'0')+carry+(num1[i]-'0')*(num2[j]-'0');
int p1=temp%10;
sum[i+j+1]=('0'+p1);
carry=temp/10;
}
sum[i+j+1]=('0'+carry);
carry=0;
}
auto p=sum.find_first_not_of('0');
if(p==string::npos)
return "0";
else return sum.substr(p);
}
};