美文网首页
Java大数阶乘

Java大数阶乘

作者: 眼若繁星丶 | 来源:发表于2020-11-04 20:21 被阅读0次

    Java大数阶乘

    描述

    我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?

    输入

    输入一个整数m(0<m<=5000)

    输出

    输出m的阶乘,并在输出结束之后输入一个换行符

    样例输入

    50
    

    样例输出

    30414093201713378043612608166064768844377641568960512000000000000
    

    模拟阶乘

    public class Solution {
        public static void main(String[] args) {
            int[] res = new int[3000];  // 存储阶乘的最终结果
            res[0] = 1; // 0和1的阶乘为1
    
            Scanner sc = new Scanner(System.in);
            System.out.print("请输入 n! 的 n:");
            int n = sc.nextInt();  // 待求阶乘的数
            int top = 0, carry = 0; // 分别表示结果的最高位和进位
    
            for (int i = 2; i <= n; i++) {  // 一直乘到n,模拟阶乘过程
                for (int j = 0; j <= top; j++) {
                    res[j] = res[j] * i + carry;
                    carry = res[j] / 10;    // 计算进位
                    if (j == top && carry >= 1) {   // 计算到最高位且发现最高位有进位
                        top++;  // 最高位加一
                    }
                    res[j] = res[j] % 10;   // 取余,把余数存到当前位置
                }
            }
            for (int i = top; i >= 0; i--) {
                System.out.print(res[i]);
            }
        }
    }
    

    BigInteger

    public class Solution {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.print("请输入 n! 的 n:");
            int n = sc.nextInt();
            BigInteger bi = new BigInteger("1");
    
            for (int i = 2; i <= n; i++) {
                bi = bi.multiply(new BigInteger(i + ""));
            }
            System.out.println(bi);
            sc.close();
        }
    }
    

    相关文章

      网友评论

          本文标题:Java大数阶乘

          本文链接:https://www.haomeiwen.com/subject/hnchvktx.html