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