第十四届蓝桥杯JavaB组试题A——阶乘求和

  • Post author:
  • Post category:java


在这里插入图片描述

该题是一个填空题,我们可以通过规律来找到答案,由于从1到202320232023的阶层和过于庞大,当阶层和到第39项时,最后9位数已经保持不变了。

我们可以通过以下代码进行debug测试来发现这个规律

import java.math.BigInteger;

public class Main {
    public static void main(String[] args) {
        BigInteger num = BigInteger.ONE;
        BigInteger sum = BigInteger.ZERO;
        for (long i = 1; i <= 202320232023l;i++){
            num = num.multiply(BigInteger.valueOf(i));
            sum = sum.add(num);
            System.out.println(sum);
        }
    }
}

上面代码中用到了BigInteger类

为了描述更大的整数数据时,Java中提供了

BigInteger类

。BigInteger类型的数字范围较Integer,Long类型的数字范围要大得多,它支持任意精度的整数,在运算中 BigInteger 类型可以准确地表示任何大小的整数值而不会丢失任何信息。

其中BigInteger中,属性 One通常用于将值与 1 进行比较 BigInteger,或将 1 分配给 BigInteger对象,上述代码为为我们定义的变量赋值唯一,同理

BigInteger.ZERO

为为我们定义的变量赋值为0


BigInteger.valueOf ()

是将一个已知的整数转换为大整数。 valueOf 静态方法构造出的大整数限制在 long 的范围

multiply和add方法分别是进行两个BigInteger的 × 与 +

在这里插入图片描述

通过计算我们得知,每次循环num的值都为从1到当前循环i的阶层和,然后我们进行debug测试

在这里插入图片描述

当第39项时,再往后最后9位数已经不变量

所以答案为:420940313



版权声明:本文为m0_75278009原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。