LeetCode 42. Multiply Strings

来源:互联网 发布:mac系统zh cn 编辑:程序博客网 时间:2024/06/01 08:42

模拟乘法竖式计算,

有个trick是用一维数组vector<int> result(a.size()+b.size(), 0)累计每个位上的值(可以大于10),最后再做进位。


代码:

class Solution {public:string multiply(string a, string b) {vector<int> result(a.size()+b.size(), 0);string ret;for (size_t i = 0; i < a.size(); ++ i){for (size_t j = 0; j < b.size(); ++ j)            {                result[i+j+1] += ((a[i]-48)*(b[j]-48));            }}        for (int i=a.size()+b.size()-1; i >= 0; -- i)        {            if (i > 0)            {                result[i-1] += result[i] / 10; // carry            }            ret.insert(ret.begin(), result[i]%10+48);        }        ret = ret[0]=='0'? ret.substr(1): ret;        return (a=="0"||b=="0")? "0": ret;}};


0 0