首页 > 其他 > 详细

大整数乘法(字符串乘法)

时间:2019-06-01 10:33:34      阅读:189      评论:0      收藏:0      [点我收藏+]

题目:给定两个字符串s1和s2,返回它们代表的正整数的乘积(也用字符串表示),不能把字符串转成整数类型再操作。

解法:手动模拟乘法。假设第一个字符串有n1位,第二个有n2位,则乘积位数不会超过(n1+n2)位,因此可以先将结果字符串res设置为(n1+n2)个0。对s2的每一位,和s1的每一位依次做乘法再相加。乘积模10就是需要放在那一位的数字。在生成res时,需要和当前res该位的数字进行加法运算(如一开始时就是0),因此进位是当前乘积整除10加上这个加法运算的和整除10。在对s2的每一位操作结束后,最后一个进位还没有加上去,因此需要手动把进位加到前面一位去。循环下去可以得到乘积。

class Solution {
public:
    string multiply(string num1, string num2) {
        int l1 = num1.length();
        int l2 = num2.length();
        if (num1 == "0" || num2 == "0")
            return "0";
        string res(l1 + l2, 0);
        for (int i = l1 - 1; i >= 0; i--)
        {
            int step = 0;
            for (int j = l2 - 1; j >= 0; j--)
            {
                int mul = (num1[i] - 0) * (num2[j] - 0);
                int sum = res[i+j+1] - 0 + step + mul % 10;
                res[i+j+1] = sum % 10 + 0;
                step = sum / 10 + mul / 10;
            }
            res[i] += step;
        }
        for (int i = 0; i < l1 + l2; i++)
        {
            if (res[i] != 0)
                return res.substr(i);
        }
        return "0";
    }
};

 

大整数乘法(字符串乘法)

原文:https://www.cnblogs.com/alderheart/p/10958615.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!