美文网首页
leetcode 43-- 乘法

leetcode 43-- 乘法

作者: Ariana不会哭 | 来源:发表于2018-12-18 08:46 被阅读0次
    图片.png

    http://www.cnblogs.com/TenosDoIt/p/3735309.html
    话不多说,举个例子:

    图片.png
    后续的对乘积和进行进位处理和链接里面的内容一样,链接没有提到的就是下标有一个转换

    注意:消除多余的0的时候:while (add[i] == 0&&i>0)
    i不能小于0;
    代码:
    C++:

    string multiply(string num1, string num2) {
        int m = num1.size(), n = num2.size();
        int k = m + n - 2;
        vector<int> add(n + m, 0);
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                add[k - i - j] += (num1[i] - '0')*(num2[j] - '0');
            }
        }
        int carry = 0;
        int i;
        for (i = 0; i < m + n; i++) {
            add[i] += carry;
            carry = add[i] / 10;
            add[i] = add[i] % 10;
        }
        while (add[--i] == 0)
            ;
        string ans = "";
        if (i < 0)
            return "0";
        while (i >= 0) {
            ans.push_back(add[i--] + '0');
        }
        return ans;
    }
    

    java:

    public String multiply(String num1, String num2) {
            int m = num1.length(), n = num2.length();
            int k = m + n - 2;
            int add[] =new int[n + m];
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    add[k - i - j] += (num1.charAt(i)-'0')*(num2.charAt(j) - '0');
                }
            }
        
            int carry = 0;
            int i;
            for (i = 0; i < m + n; i++) {
                add[i] += carry;
                carry = add[i] / 10;
                add[i] = add[i] % 10;
            }
            i=i-1;
            while (add[i] == 0&&i>0)
                i--;
            String ans = "";
            if (i < 0)
                return "0";
            while (i >= 0) {
                ans=ans+(add[i--]);
            }
            return ans;
        }
    

    相关文章

      网友评论

          本文标题:leetcode 43-- 乘法

          本文链接:https://www.haomeiwen.com/subject/ugqkkqtx.html