大数阶乘

转载请注明出处:http://blog.csdn.net/ZhouLi_CSDN/article/details/46316855

很久没写算法了,今天突然想写一下大数阶乘运算,花了一个多小时写了一个demo,具体算法时间空间复杂度优化并没有考虑,有兴趣可以自己研究一下。
什么都不用说了附上代码:


public class BigNumber {

    public static void main(String[] args) {

        //阶乘因子
        int jie = 8000;

        int[] num1 = new int[5];
        int[] num2 = new int[30000];
        int[] result = new int[30000];

        int length1 = num1.length;
        int length2 = num2.length;
        int length3 = result.length;

        // int g = 0;

        num1[0] = 1;
        num2[0] = 1;

        for (int i = 1; i < jie; i++) {

            // 初始化num1  12345
            num1[0] = i % 10;
            num1[1] = (i / 10) % 10;
            num1[2] = (i / 100) % 10;
            num1[3] = (i / 1000) % 10;
            num1[4] = (i / 10000) % 10;

            //g表示进位
            int g = 0;

            for (int j = 0; j < length1; j++) {// num1
                for (int m = 0; m < length2; m++) {// num2

                    if ((m + j + 1) > 29999) {
                        break;
                    }

                    int r = num1[j] * num2[m] + result[m + j] + g;
                    g = 0;

                    if (r > 9) {
                        result[m + j] = r % 10;
                        g = r / 10;
                    } else {
                        result[m + j] = r;
                    }
                }
            }

            //将一次计算结果进行转换
            for (int k = 0; k < length2; k++) {
                num2[k] = 0;
                num2[k] = result[k];
                result[k] = 0;
            }

        }

        //输出结果
        int flag = 0;
        int fuck = 0;

        for (int k = 29999; k >= 0; k--) {
            if (num2[k] != 0) {
                flag = 1;
                fuck++;
                System.out.print(num2[k]);
            } else {
                if (flag == 1) {
                    fuck++;
                    System.out.print(num2[k]);
                }
            }

            if(fuck%60 == 0 && fuck != 0){
                System.out.println("\n");
            }
        }

        System.out.println("\n" + fuck + "");
    }

}

注释写的很清楚,可以尝试运行检验结果:

检验网站:http://zh.numberempire.com/factorialcalculator.php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值