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 test5 = new Test5_MultiOfLargeNumbers(); System.out.println(test5.multiString(str1, str2)); } }
大数相乘:Java实现
猜你喜欢
转载自blog.csdn.net/liuzhenya1994/article/details/80052210
今日推荐
周排行