class Solution {
public:
string uniMul(int v, string num2,int bias){
string ret = "";
for(int i = 0; i < bias; ++i){
ret += "0";
}
int len2 = num2.length();
int carry = 0;
for(int i = len2 - 1; i >= 0; --i){
int tmp = v * (num2[i] - '0');
tmp += carry;
ret += (tmp % 10) + '0';
carry = tmp / 10;
}
while(carry > 0){
ret += carry % 10 + '0';
carry /= 10;
}
return ret;
}
string add(string ret, string num2){
int len1 = ret.length(), len2 = num2.length();
string tmp = "";
int idx = 0, carry = 0;
while(idx < len1 && idx < len2){
int tmpv = (ret[idx] - '0') + (num2[idx] - '0') + carry;
tmp += (tmpv % 10) + '0';
carry = tmpv / 10;
++idx;
}
if(idx < len1){ //idx >= len2
for(int tmpidx = idx; tmpidx < len1; ++tmpidx){
int tmpv = (ret[tmpidx] - '0') + carry;
tmp += (tmpv % 10) + '0';
carry = tmpv / 10;
}
}
else if(idx < len2){
for(int tmpidx = idx; tmpidx < len2; ++tmpidx){
int tmpv = (num2[tmpidx] - '0') + carry;
tmp += (tmpv % 10) + '0';
carry = tmpv / 10;
}
}
while(carry > 0){
int tmpv = carry % 10;
tmp += tmpv + '0';
carry /= 10;
}
return tmp;
}
bool checkZero(string&ret){
//bool allZero = true;
int len = ret.length();
for(int i = 0; i < len; ++i){
if(ret[i] != '0'){
return false;
}
}
return true;
}
string multiply(string num1, string num2) {
string ret = "";
int len1 = num1.length(), len2 = num2.length();
for(int i = len1 - 1; i >= 0; --i){
string tmpret = uniMul(num1[i] - '0', num2, len1 - i - 1);
ret = add(ret, tmpret);
}
int len = ret.length();
int left = 0, right = len - 1;
while(left < right){
char tmp = ret[right];
ret[right] = ret[left];
ret[left] = tmp;
++left;
--right;
}
if(checkZero(ret)){
return "0";
}
return ret;
}
};
错误1:
1. 没有处理前导零的情况
2. add函数的返回值错误