leetcode43

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

思路:模拟竖乘:先初始化res数组,他的长度不会超过两个数的长度之和,初始化为0。乘法分割成num2的个位、十位

、百位...分别乘num1的各个位,同时记录加法、乘法的进位,边乘边加。

public static String multiply(String num1, String num2) {
        int len1 = num1.length();
        int len2 = num2.length();
        int[] res = new int[len1 + len2];
        int add = 0, mul = 0, i = 0,j = 0;
        for (i = len1 - 1; i >= 0; i--) {
            add = 0;
            mul = 0;
            for (j = len2 - 1; j >= 0 ; j--) {
                int tmp = getNum(num1, i) * getNum(num2, j);
                int oldBit = res[i + j + 1];
                res[i + j + 1] = (tmp % 10 + oldBit + add + mul) % 10;
                add = (tmp % 10 + oldBit + add + mul) / 10;
                mul = tmp / 10;
            }
            res[i + j + 1] = add + mul;
        }
        StringBuffer sb = new StringBuffer();
        boolean flag = true;
        for (int bit: res){
            if(flag && bit == 0)
                continue;
            flag =false;
            sb.append(bit);
        }
        return sb.toString().equals("") ? "0": sb.toString();
    }
    public static int getNum(String num, int index){
        return num.charAt(index) - '0';
    }

猜你喜欢

转载自blog.csdn.net/qwerrfxgj/article/details/89390117
今日推荐