基本思想是把乘法拆分开,每一位和字符串相乘,再加起来。
class Solution {
public:
string multiply(string num1, string num2) {
int len1=num1.size(),len2=num2.size();
vector<int>arr(len1+len2,0); //初始化最大可能大小
for(int i=len1-1;i>=0;i--)
{
for(int j=len2-1;j>=0;j--)//每位相乘后相加保存
{
int index=len1+len2-1-(len1-1-i+len2-1-j);
arr[index]+=(num1[i]-'0')*(num2[j]-'0');
}
}
int index=len1+len2-1;
while(index>=1) //进位
{
arr[index-1]+=arr[index]/10;
arr[index]=arr[index]%10;
index--;
}
index=0;
while(index<len1+len2&&arr[index]==0)//去除前导零
{
index+=1;
}
if(index==len1+len2)return "0";
string ans;
for(int i=index;i<len1+len2;i++) //转换为字符串
{
ans+=arr[i]+'0';
}
return ans;
}
};