加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数阶乘

发布时间:2020-12-14 02:33:47 所属栏目:大数据 来源:网络整理
导读:转载请注明出处:http://www.voidcn.com/article/p-fcurcdrb-mq.html 很久没写算法了,今天突然想写一下大数阶乘运算,花了一个多小时写了一个demo,具体算法时间空间复杂度优化并没有考虑,有兴趣可以自己研究一下。 什么都不用说了附上代码: public class

转载请注明出处:http://www.voidcn.com/article/p-fcurcdrb-mq.html

很久没写算法了,今天突然想写一下大数阶乘运算,花了一个多小时写了一个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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读