不用BigInteger实现两个大数字相乘
思路
| 位数 | 1 | 2 | 3 |
|---|---|---|---|
| 数字 | 3 | 4 | 5 |
| 6 | 7 | 8 |
如表所示
两个数345和678
两个数位数相加为6的数积为40
两个数位数相加为5的数为32+35
两个数位数相加为4的数为24+30+28
两个数位数相加为3的数为21+24
两个数位数相加为2的数为18
然后逐次进行进位得到最终的数

代码实现
public static void main(String[] args) {
System.out.println("请输入两个大数");
Scanner scanner = new Scanner(System.in);
if (scanner.hasNext()){
String num1 = scanner.next();
String num2 = scanner.next();
System.out.println("相乘结果为:"+getNum(num1, num2));
}
}
public static String getNum(String num1,String num2){
char[] char1 = num1.toCharArray();
char[] char2 = num2.toCharArray();
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
//将char字符串转换为对应的数字
for (char c : char1) {
list1.add(c - '0');
}
for (char c : char2) {
list2.add(c - '0');
}
//设置一个定长的集合用于存放计算过后的结果
List<Integer> resList = new ArrayList<>(Collections.nCopies(list1.size()+list2.size(),0));
for (int i = 0; i < list1.size(); i++) {
for (int j = 0; j < list2.size(); j++) {
resList.set(i+j,resList.get(i+j)+list1.get(i)*list2.get(j));
}
}
for (int i = resList.size() - 1; i > 0; i--) {
resList.set(i-1,resList.get(i-1)+resList.get(i)/10);
resList.set(i,resList.get(i)%10);
}
StringBuffer sb = new StringBuffer();
resList.stream().limit(resList.size()-1).forEach(i->{
sb.append(i);
});
return sb.toString();
}
测试结果


这篇博客介绍了一种无需使用BigInteger库的方法来计算两个大数字的乘积。通过分析数字位数,逐位相乘并进行进位操作,实现了大数相乘的算法。博主提供了一个Java代码示例,演示了如何将两个数的每一位对应相乘并累计进位,最终得到结果。这种方法对于理解大数运算的原理非常有帮助。
685

被折叠的 条评论
为什么被折叠?



