leetcode43.|leetcode43. 字符串相乘

【leetcode43.|leetcode43. 字符串相乘】字符串相乘,通过模拟竖乘的方式,并使用一个数组来记录每一位上的结果

/** * 字符串相乘(大数相乘) */ public class Multiply { public static String multiply(String num1, String num2) { if (num1.equals("0") || num2.equals("0")) { return "0"; } int length1 = num1.length(); int length2 = num2.length(); StringBuilder str = new StringBuilder(); int[] arrayInt = new int[length1 + length2]; // 就是一个模拟竖乘的过程,对于乘积大于10的数,还会向前进位 for (int i = length1 - 1; i >= 0; i--) { for (int z = length2 - 1; z >= 0; z--) { int number1 = num1.charAt(i) - 48; int number2 = num2.charAt(z) - 48; // 向前的总是要进位的 arrayInt[i + z] += number1 * number2; // 这里确保了当第0位是大于10的时候不会再往前进位,防止出现错误,直接将第0位的用来生成string就可以了 if (arrayInt[i + z] >= 10 && (i + z) != 0) { // 这里注意先后顺序以及符号,向前的总是要进位的 arrayInt[i + z - 1] += arrayInt[i + z] / 10; arrayInt[i + z] = arrayInt[i + z] % 10; } } }for (int i = 0; i <= length1 + length2 - 2; i++) { str.append(arrayInt[i]); }return str.toString(); }public static void main(String[] args) { String num1 = "999"; String num2 = "99"; System.out.println(multiply(num1, num2)); } }

    推荐阅读