leetcode multiply strings

来源:互联网 发布:jdbc连接数据库代码 编辑:程序博客网 时间:2024/06/05 04:45
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函数的返回值错误

0 0
原创粉丝点击