题意:给定两个整数num1、num2,计算两者乘积。
分析:大数相乘。此题较为简单,不包含正负号、小数点等复杂的情况。
代码:
(1)逐位相乘:
class Solution {
public:
string multiply(string num1, string num2) {
int n1=num1.size();
int n2=num2.size();
vector<int> v1(n1,0);
vector<int> v2(n2,0);
vector<int> num(n1+n2,0);
for(int i=0;i<n1;++i) v1[i]=num1[n1-1-i]-'0';
for(int i=0;i<n2;++i) v2[i]=num2[n2-1-i]-'0';
for(int i=0;i<n1;++i){
for(int j=0;j<=n2;++j){
num[i+j]+=v1[i]*v2[j];
}
}
int n=n1+n2-1,c=0;
for(int i=0;i<n;++i){
int tmp=num[i]/10;
num[i]=(c+num[i])%10;
c=tmp;
}
if(c>0){
num[n++]=c;
}
string ans="";
for(int i=n-1;i>=0;--i){
ans+=(num[i]+'0');
}
return ans;
}
};
(2)模拟乘法计算:
class Solution {
public:
string multiply(string num1, string num2) {
int n1=num1.size();
int n2=num2.size();
vector<int> v1(n1,0);
vector<int> v2(n2,0);
vector<int> num(n1+n2,0);
for(int i=0;i<n1;++i) v1[i]=num1[n1-1-i]-'0';
for(int i=0;i<n2;++i) v2[i]=num2[n2-1-i]-'0';
int c;
for(int i=0;i<n1;++i){
c=0;
for(int j=0;j<n2;++j){
int tmp=num[i+j]+v1[i]*v2[j]+c;
num[i+j]=tmp%10;
c=tmp/10;
}
if(c>0) num[i+n2]+=c;
}
string ans="";
int k=n1+n2-1;
while(k>=0&&num[k]==0) k--;
if(k<0) return "0";
for(int i=k;i>=0;--i){
ans+=(num[i]+'0');
}
return ans;
}
};