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(); } }
。。