两个字符串相乘主要应用在大数字乘法方面,下面是代码实现
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"));
}
}