大数阶乘

一、背景
阶乘比较多的时候,很难用普通的数据类型来存储中间结果。
二、解决办法
当然可以用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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值