public class MultiOfLargeNumbers {
public String multiString(String str1, String str2){
// 判断正负号
int signOfStr1 = str1.startsWith("-") ? 1 : 0;
int signOfStr2 = str2.startsWith("-") ? 1 : 0;
// 将数字逆序放到整型数组中
int[] arrOfStr1 = new int[str1.length() - signOfStr1];
for (int i = 0; i < arrOfStr1.length; i++) {
arrOfStr1[i] = str1.charAt(str1.length() - 1 - i) - '0';
}
int[] arrOfStr2 = new int[str2.length() - signOfStr2];
for (int i = 0; i < arrOfStr2.length; i++) {
arrOfStr2[i] = str2.charAt(str2.length() - 1 - i) - '0';
}
// 开始运算
StringBuffer subResult = new StringBuffer(); // 过渡结果
for (int i = 0; i < arrOfStr2.length; i++) {
StringBuffer midResult = new StringBuffer(); //每位的运算结果
int valueOfCurrBit = 0; // 每位相乘时当前位上的数字
int valueOfNextBit = 0; // 每位相乘时进位上的数字
for (int k = 0; k < i; k++) {
midResult.append(0);
}
for (int j = 0; j < arrOfStr1.length; j++) {
valueOfCurrBit = (arrOfStr2[i] * arrOfStr1[j] + valueOfNextBit) % 10;
valueOfNextBit = (arrOfStr2[i] * arrOfStr1[j] + valueOfNextBit) / 10;
midResult.append(valueOfCurrBit);
}
if (valueOfNextBit > 0) {
midResult.append(valueOfNextBit);
}
// 执行相加运算,结果存储在subResult中
subResult = addString(subResult, midResult);
}
if (signOfStr1 + signOfStr2 == 1) {
subResult.append('-');
}
return subResult.reverse().toString();
}
private StringBuffer addString(StringBuffer subResult, StringBuffer midResult){
int diff = Math.abs(midResult.length() - subResult.length());
StringBuffer sb = new StringBuffer();
while (diff-- > 0) {
sb.append(0);
}
if (midResult.length() > subResult.length()) {
subResult.append(sb);
} else {
midResult.append(sb);
}
int currentBit = 0;
int carryBit = 0;
for (int i = 0; i < subResult.length(); i++) {
currentBit = ((subResult.charAt(i) - '0') + (midResult.charAt(i) - '0') + carryBit) % 10;
carryBit = ((subResult.charAt(i) - '0') + (midResult.charAt(i) - '0') + carryBit) / 10;
subResult.setCharAt(i, (char) (currentBit + '0'));
}
if (carryBit > 0) {
subResult.append(carryBit);
}
return subResult;
}
public static void main(String[] args) {
String str1 = "-123456789";
String str2 = "987654321";
MultiOfLargeNumbers test = new MultiOfLargeNumbers();
System.out.println(test.multiString(str1, str2));
}
}
大数相乘:Java实现
最新推荐文章于 2022-12-20 16:31:41 发布