题目链接:
题目描述:
字符串实现大数相乘。
题目分析:
先给一个int型数组分配大小为num1.size()+num2.size(),用它存放两个字符串中每个数相乘的结果。num1第i位与num2第j位相乘,结果应当是放在第i+j+1位。如果i+j+1位有值,直接加上去。多加一个1是为了处理v[0]进位问题,如果是放在i+j位,v[0]>=10,不能进位。
然后再从后往前遍历一次,处理进位。
最后遍历去掉前置0。再转化为string类型就ok啦。
代码:
class Solution {
public:
string multiply(string num1, string num2) {
if(num1=="0" || num2=="0"){
return "0";
}
int len1=num1.size();
int len2=num2.size();
vector<int> v(len1+len2,0);
for(int i=0;i<len1;i++){
for(int j=0;j<len2;j++){
v[i+j+1]+=(num1[i]-'0')*(num2[j]-'0');
}
}
for(int i=len1+len2-1;i>=0;i--){
if(v[i]>=10){
v[i-1]+=v[i]/10;
v[i]%=10;
}
}
int k=0;
while(v[k]==0){
k++;
}
string result="";
while(k<len1+len2){
result+=(v[k]+'0');
k++;
}
return result;
}
};