法一
/**
* 9 9 9
* × 6 7 8
* ----------------------
* 72 72 72
* 63 63 63
* 54 54 54
* ----------------------
* 54 117 189 135 72
* ----------------------
* 54 117 189 142 2
* -----------------------
* 54 117 203 2 2
* -----------------------
* 54 137 3 2 2
* -----------------------
* 67 7 3 2 2
* -----------------------
* 6 7 7 3 2 2
*
* @param num1
* @param num2
* @return
*/
public String multiply(String num1, String num2) {
if (num1.charAt(0) == '0' || num2.charAt(0) == '0') {
return "0";
}
int len1 = num1.length(), len2 = num2.length();
int[] mul = new int[len1 + len2 - 1]; // 结果的位数 = 二者位数之和 or 二者位数之和 - 1
for (int i = 0; i < len1; i++) { // 0代表最高位
for (int j = 0; j < len2; j++) { // 各位进行相乘计算把结果累加入相应的index中
mul[i + j] += (num1.charAt(i) - '0') * (num2.charAt(j) - '0');
}
}
for (int i = len1 + len2 - 2; i > 0; i--) { // 从低位向高位遍历
mul[i - 1] += mul[i] / 10; // 前一位加上后一位的进位
mul[i] %= 10; // 后一位留下个位
}
StringBuilder ans = new StringBuilder();
for (int bit : mul) {
ans.append(bit);
}
return ans.toString();
}
本地测试
/**
* 43. 字符串相乘
*/
lay.showTitle(43);
Solution43 sol43 = new Solution43();
String num43_1 = "999";
String num43_2 = "678";
System.out.println(num43_1 + "*" + num43_2 + "=" + sol43.multiply(num43_1, num43_2));