两个字符串相乘

两个字符串相乘主要应用在大数字乘法方面,下面是代码实现

public class MultiplyString {
    
    
    public static String multiply(String num1, String num2) {
    
    
        //两个数字相乘,得到的结果的最大位数为两个相乘元素的长度的和
        int[] result = new int[num1.length() + num2.length()];
        for (int i = num1.length() - 1; i >= 0; i--) {
    
    
            for (int j = num2.length() - 1; j >= 0; j--) {
    
    
                result[i + j + 1] += (num1.charAt(i) - '0') * (num2.charAt(j) - '0');
            }
        }
        int carry = 0;
        for (int i = num1.length() + num2.length() - 1; i >= 0; i--) {
    
    
            result[i] += carry;
            if (result[i] > 9) {
    
    
                carry = result[i] / 10;
                result[i] = result[i] % 10;
            } else {
    
    
                carry = 0;
            }
        }
        boolean isPreFixZero = true;
        StringBuilder resultStr = new StringBuilder();
        for (int i = 0; i < num1.length() + num2.length(); i++) {
    
    
            if (isPreFixZero && result[i] != 0) {
    
      // 判断是否是前缀的零,如果是前缀的零,就不添加,如果不是前缀的零,就开始作为结果添加。
                isPreFixZero = false;
            }
            if (!isPreFixZero) {
    
    
                resultStr.append(result[i]);
            }
        }
        if (resultStr.length() == 0) {
    
     // 当所有的数字都为0的时候,至少有一个零
            resultStr.append('0');
        }
        return resultStr.toString();
    }

    public static void main(String[] args) {
    
    
        System.out.println(multiply("12342143","123"));
        System.out.println(multiply("0","0"));
    }
}

猜你喜欢

转载自blog.csdn.net/liu_12345_liu/article/details/102472282