一、背景
阶乘比较多的时候,很难用普通的数据类型来存储中间结果。
二、解决办法
当然可以用java自带的BigDecimal来存储。但是这里介绍的是用普通的int[]来存储。
三、过程
主要是使用int[]来存储乘数,个位存在数组的末尾。
1.乘数的各个位置的数,分别乘以被乘数
2.乘数从后向前,留数、进位
三、实现
public class BigNumTest {
//大数的个位在数组最后一位
// static int[] a = new int[]{5, 2, 3};
//乘数
static int num = 10000;
public static void main(String[] args) {
int[] ints = new int[100000];
ints[ints.length -1] = 1;
//阶乘
for(int i = 1; i <= num; i++){
ints = getMutiNum(ints,i);
}
for (int i = 0; i < ints.length; i++) {
System.out.print(ints[i]);
}
}
private static int[] getMutiNum(int[] a , int num){
for (int i = 0; i < a.length; i++) {
a[i] *= num;
}
//第二步:留数 进位,注意从数组后到前,只需要遍历到前面第二位,留出第一位,防止第一位进位,越界
for (int i = a.length - 1; i > 0; i--) {
a[i - 1] += (a[i] / 10);
a[i] %= 10;
}
return a;
}
}