43. 字符串相乘

43. 字符串相乘

package 字符串;


public class 字符串相乘 {
    public static void main(String[] args) {
        String num1 = "123";
        String num2 = "456";
        字符串相乘 o = new 字符串相乘();
        System.out.println(o.addString(num1, num2));
        System.out.println(o.multiply(num1, num2));
    }


    // 利用乘法竖式的思想,先用num2的个位和num1相乘,先用num2的十位和num1相乘
    // 最后补零相加
    public String multiply(String num1, String num2) {
        if (num1.equals("0") || num2.equals("0")) {
            return "0";
        }
        String s = null;
        String result = null;
        for (int i = num2.length() - 1; i >= 0; i--) {
            int k = num2.charAt(i) - '0';
            StringBuilder sb = new StringBuilder();
            int carray = 0;
            // 补0
            for (int j = 0; j < num2.length() - 1 - i; j++) {
                sb.append(0);
            }
            for (int j = num1.length() - 1; j >= 0; j--) {
                int q = num1.charAt(j) - '0';
                int mul = k * q + carray;
                carray = mul / 10;
                mul = mul % 10;
                sb.append(mul);
            }
            if (carray != 0) {
                sb.append(carray);
            }
            s = sb.reverse().toString();
            result = addString(result, s);
        }
        return result;
    }

    // 两个字符串相加
    // "123"
    // "4567"
    public String addString(String result, String s) {
        if (result == null) {
            return s;
        }
        if (s == null) {
            return result;
        }
        StringBuilder sb = new StringBuilder();
        int i = result.length() - 1;
        int j = s.length() - 1;
        int carray = 0;
        while (i >= 0 || j >= 0 || carray != 0) {
            int m = i >= 0 ? result.charAt(i) - '0' : 0;
            int n = j >= 0 ? s.charAt(j) - '0' : 0;
            int sum = (m + n + carray) % 10;
            carray = (m + n + carray) / 10;
            sb.append(sum);
            i--;
            j--;
        }
        return sb.reverse().toString();
    }


}

。。

原文地址:https://www.cnblogs.com/guoyu1/p/15633066.html