小算法,关于阶乘数字过大溢出的解决办法
思路:假设372为一个大数字,18为一个普通int型数字
代码如下:
public class Demo01 {
//求一个数的阶乘,当求一个很大的数的阶乘,会造成数据溢出
//解决办法:让数组解决
public static void main(String[] args) {
int[] arr=new int[100];
arr[arr.length-1]=1;
int n=50;
int flag=-1;
for(int i=1;i<=n;i++){
arr=demo(arr,i);
}
for(int i=0;i<arr.length;i++){
flag++;
if(arr[i]!=0){
break;
}
}
for(int i=flag;i<arr.length;i++){
System.out.print(arr[i]);
}
}
static int[] demo(int[] arr,int num){
for(int i=0;i<arr.length;i++){
arr[i]*=num;//计算每一位
}
//进和留
for(int i=arr.length-1;i>0;i--){
arr[i-1]+=arr[i]/10;
arr[i]=arr[i]%10;
}
return arr;
}
}