阶乘求和题解

 分析:S=1!+2!+3!+...+202320232023!  其中1-202320232023是连续的,可以采用for循环,而他的每一小部分是一个阶乘,可以在这个for循环中再嵌套一个for循环来获得每一部分的阶乘。

由于202320232023以及所求的S都太大了,数据类型用int肯定不行,所以这里我采用了long类型,注意:数字大的在后面添加一个L。

由于所求的是的末尾9位数字,所以我们只需进行后9位数字的运算即可,可以避免超出数据类型范围。

由于运算到i=202320232023时S的后9位数字耗时太多,我们可以将每一个i的值所对应的S后9位数字都显示出来,方便观察。

正确代码实现:

public class Main {
    public static void main(String[] args) {
//        420940313
        long sum=0;
        long temp=1000000000;
        long ss = 1;
        for (long i = 1; i <= 202320232023L ; i++) {
            ss=1;
            for (long j = 1; j <=i; j++) {//获得每一i值的阶乘。
                ss=(ss*j)%temp;
               // System.out.println("j:"+j+",ss:"+ss);
            }
          sum=(sum+ss)%temp;
            System.out.println("i:"+i+",      sum:"+sum);
        }
    }
}

观察每一i值S的后9位数字:

i:1,      sum:1
i:2,      sum:3
i:3,      sum:9
i:4,      sum:33
i:5,      sum:153
i:6,      sum:873
i:7,      sum:5913
i:8,      sum:46233
i:9,      sum:409113
i:10,      sum:4037913
i:11,      sum:43954713
i:12,      sum:522956313
i:13,      sum:749977113
i:14,      sum:928268313
i:15,      sum:602636313
i:16,      sum:392524313
i:17,      sum:820620313
i:18,      sum:526348313
i:19,      sum:935180313
i:20,      sum:111820313
i:21,      sum:821260313
i:22,      sum:428940313
i:23,      sum:405580313
i:24,      sum:844940313
i:25,      sum:828940313
i:26,      sum:412940313
i:27,      sum:180940313
i:28,      sum:684940313
i:29,      sum:300940313
i:30,      sum:780940313
i:31,      sum:660940313
i:32,      sum:820940313
i:33,      sum:100940313
i:34,      sum:620940313
i:35,      sum:820940313
i:36,      sum:20940313
i:37,      sum:420940313
i:38,      sum:620940313
i:39,      sum:420940313
i:40,      sum:420940313
i:41,      sum:420940313
i:42,      sum:420940313
i:43,      sum:420940313
i:44,      sum:420940313
i:45,      sum:420940313
i:46,      sum:420940313
i:47,      sum:420940313
i:48,      sum:420940313
i:49,      sum:420940313
i:50,      sum:420940313
i:51,      sum:420940313
i:52,      sum:420940313
i:53,      sum:420940313
i:54,      sum:420940313
i:55,      sum:420940313
i:56,      sum:420940313
i:57,      sum:420940313
i:58,      sum:420940313
i:59,      sum:420940313
i:60,      sum:420940313
i:61,      sum:420940313
i:62,      sum:420940313
i:63,      sum:420940313
i:64,      sum:420940313
i:65,      sum:420940313
i:66,      sum:420940313
i:67,      sum:420940313
i:68,      sum:420940313
i:69,      sum:420940313
i:70,      sum:420940313
i:71,      sum:420940313
i:72,      sum:420940313
i:73,      sum:420940313
i:74,      sum:420940313
i:75,      sum:420940313
i:76,      sum:420940313
i:77,      sum:420940313
i:78,      sum:420940313
i:79,      sum:420940313
i:80,      sum:420940313

可以得知当i=39往后S的后9位数字sum已经恒定了=420940313。

所以答案就为420940313。

收获:一种思路:

1.当所求的使一个很大的数的后几位,我们可以只进行后几位数的运算

2.当所求数字需要运行很长时间才出来,我们可以在其中输出其中的数据变化,这样一是可以掌握数据的变化情况,可以根据这来判断自己的逻辑是否有误。二是可以观察数据的变化规律也许会有意外的惊喜。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值