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.
- Converting the input string to integer is NOT allowed.
- You should NOT use internal library such as BigInteger.
Subscribe to see which companies asked this question
分析:
ac代码:
class Solution {
public:
string multiply(string num1, string num2) {
int n1=num1.length(),n2=num2.length(),L=n1+n2,i,j;
vector<int>ires(L,0);
string rets(L,'0');
//模拟手算从最后一位开始处理
for(i=n1-1;i>=0;i--)
{
for(j=n2-1;j>=0;j--)
ires[i+j+1]+=(num1[i]-'0')*(num2[j]-'0');
}
//进位
for(i=L-1;i>0;i--)
{
ires[i-1]+=ires[i]/10;
ires[i]=ires[i]%10;
}
//转换成字符串
for(i=L-1;i>=0;i--)
{
rets[i]=ires[i]+'0';
}
//前导0
for(i=0;i<L;i++)
{
if(rets[i]!='0')
break;
}
if(i==L)
return "0";
return rets.substr(i,L-i);
}
};