主要用到了大整数的乘法运算思想,就是逐位相乘,然后进位统计结果。代码如下:
class Solution {
public:
string multiply(string num1, string num2) {
if(num1=="0"||num2=="0")
{
return "0";
}
int n1=num1.size(),n2=num2.size();
int n=n1+n2; //结果最多就是n位,最少n-1
vector<int> ves(n,0);
int k=n-2;
for(int i=0;i<n1;i++)
for(int j=0;j<n2;j++)
{//从高位开始乘
ves[k-i-j]+=(num1[i]-'0')*(num2[j]-'0');
}
int carry=0;
for(int i=0;i<n;i++)
{//从低位开始向前进位
ves[i]+=carry;
carry=ves[i]/10;
ves[i]%=10;
}
//消除高位0
int t=n-1;
while(ves[t]==0)
{
--t;
}
string result;
while(t>=0)
{
result.append(1,ves[t]+'0');
--t;
}
return result;
}
};