字符串相乘
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
说明:
num1 和 num2 的长度小于110。
num1 和 num2 只包含数字 0-9。
num1 和 num2 均不以零开头,除非是数字 0 本身。
不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
代码与思路
模拟乘法竖式计算的方法,找到竖式计算第二步相加时的的数位关系,利用这种数位关系相加来建立表示结果的数组,最后记得要把数组各位转化为sting类型的返回值
class Solution {
public:
string multiply(string num1, string num2) {
if(num1=="0"||num2=="0"){
return "0";
}
int a=1;int b=1;
int len1=num1.size();
int len2=num2.size();
vector<int> num3(len1+len2);
int c=0;
int m=0;int n=0;
for(int i=len1-1;i>=0;i--){
m=num1[i]-'0';
for(int j=len2-1;j>=0;j--){
n=num2[j]-'0';
num3[i+j+1]=num3[i+j+1]+m*n;
}
}
for(int k=len1+len2-1;k>0;k--){
num3[k-1]=num3[k-1]+num3[k]/10;
num3[k]=num3[k]%10;
}
string res;
if(num3[0]==0){
c=1;
}
else{
c=0;
}
while(c<len1+len2){
res.push_back(num3[c]);
c++;
}
for(int l=0;l<res.size();l++){
res[l]=res[l]+'0';
}
return res;
}
};
总结
for(int k=len1+len2-1;k>0;k--){
num3[k-1]=num3[k-1]+num3[k]/10;
num3[k]=num3[k]%10;
}
这里我本来把两行运算给写反了,结果出大问题,还不知道错出在哪里,只好自己代替计算机从头走一遍才能找到错误,真的累