leetcode 43-- 乘法

图片.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 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-- 乘法)