LeetCode OJ - Multiply Strings

来源:互联网 发布:有福气的八字 知乎 编辑:程序博客网 时间:2024/06/09 20:38

Given two numbers represented as strings, return multiplication of the numbers as a string.

Note: The numbers can be arbitrarily large and are non-negative.

分析:大数乘法运算,巧妙的使用数组来模拟计算。若两个数长度为l1, l2那么结果长度最大为l1 + l2。

class Solution {public:    string multiply(string num1, string num2) {    if(num1=="0" || num2=="0") return "0";    int l1 = num1.length(), l2 = num2.length();    int* res = new int[l1+l2];        memset(res,0,sizeof(int)*(l1+l2));    for(int i=0; i<l1; ++i)    for (int j=0; j<l2; ++j)    res[i+j+1] += (num1[i] - '0') * (num2[j] - '0');        string ss = "";    for (int k=l1+l2-1; k>=0; --k){    if(k>0) res[k-1] += res[k]/10;    res[k] %= 10;    ss = char(res[k]+'0')+ss;    }    ss = ss[0]=='0'? ss.substr(1):ss;    return ss;    }};

当然迭代计算时,也可以用进位标记为来辅助计算。

    string ss = "";    int flag = 0;    for (int k=l1+l2-1; k>=0; --k){            //进位计算            int tmp = (res[k] + flag) / 10;            //结果计算            res[k] = (res[k] + flag) % 10;            flag = tmp;            ss = char(res[k]+'0')+ss;    


0 0
原创粉丝点击