思路:和两个数 错位相乘相加的想法一致,只不过结果用字符串来表示,这样的话可以计算超大数相乘,不用考虑int 和long等的范围。
class Solution {
public:
string multiply(string num1, string num2) {
int n1=num1.size(),n2=num2.size();
int k=n1+n2-2,carry_bit=0;
vector<int> v(n1+n2,0);
string ans;
//错位相乘相加
for(int i=0;i<n1;++i)
for(int j=0;j<n2;++j)
{
v[k-i-j]+=(num1[i]-'0')*(num2[j]-'0');
}
//计算进位v[0]表示最低位
for(int i=0;i<n1+n2;++i)
{
v[i]+=carry_bit;
carry_bit=v[i]/10;
v[i]=v[i]%10;
}
//去掉首位的0
int i=n1+n2-1;
while(v[i]==0) --i;
if(i<0) return "0";
while(i>=0) ans.push_back(v[i--]+'0');
return ans;
}
};
940




被折叠的 条评论
为什么被折叠?



