佛山企业网站开发公司,长沙微信网站制作,怎么介绍自己的家乡,北京做网站哪家公司好一、题目 【问题描述】 令 S 1 ! 2 ! 3 ! . . . 202320232023 ! S 1! 2! 3! ... 202320232023!S1!2!3!...202320232023!#xff0c;求 S SS 的末尾 9 位数字。 提示#xff1a;答案首位不为 0。 【答案提交】 这是一道结果填空的题#xff0c;你只需要算出结果后…一、题目 【问题描述】 令 S 1 ! 2 ! 3 ! . . . 202320232023 ! S 1! 2! 3! ... 202320232023!S1!2!3!...202320232023!求 S SS 的末尾 9 位数字。 提示答案首位不为 0。 【答案提交】 这是一道结果填空的题你只需要算出结果后提交即可。本题的结果为一 个整数在提交答案时只填写这个整数填写多余的内容将无法得分 二、思路 我自己想的时候是直接去计算1~202320232023的阶乘可是202320232023超过了int的范围也超过了long的范围于是查看了答案目前有两种思路 1.法一 我们可以看到从39的阶乘之后后9位的阶乘都是0这也是题目中为啥让我们算末尾9位数了相当于不用加404142...等的阶乘转化为求1~39的阶乘和。
各阶乘数 10!362880020!243290200817664000030! 265252859812191058636308 480000000...39! 20397882081197443358640281739902897356 80000000040! 815915283247897734345611269596115894272 00000000041! 33452526613163807108170062053440751665152 00000000042! 1405006117752879898543142606244511569936384 00000000043! 60415263063373835637355132068513997507264512 00000000044!2658271574788448768043625811014615890319638528 000000000 但我们也不是单纯的算1~39的阶乘因为计算的过程中数将会非常的大我们在每次算到某个数的阶乘时把它对 模运算9 得到后9位数字 同时把这个数加到阶乘和 里的时候也要 模9最终直接输出即可。
package lan2023;public class A阶乘求和 {public static void main(String[] args) {long s 0;long j 1;for(int i 1; i 39; i) {j j * i % (long)1e9; s s j;s s % (long)1e9;}System.out.println(s);}
}运行结果 420940313 二、法二 因为这个题涉及到阶乘 甚至要 求和我们此时可以使用BigInteger类 创建BigInteger类 以字符串的形式BigInteger sum new BigInteger(0); 以long型数据BigInteger sum BigInteger.valueOf(0); 方法 加 a.add(b) 减 a.subtract(b) 乘 a.multiply(b) 除 a.divide(b) 比较大小 a.compareTo(b) package lan2023;import java.math.BigInteger;public class A阶乘求和 {public static void main(String[] args) { BigInteger sum BigInteger.valueOf(0);BigInteger j BigInteger.valueOf(1);for(int i 1; i 39; i) {j j.multiply(BigInteger.valueOf(i));sum sum.add(j);}System.out.println(sum);//最后记得取后9位}
}使用 大数BigInteger 时也没什么不同,就是不管啥时候要使用他的方法运算的时候 两个数都要是大数 注意 将一个整数a转化位大数 BigInteger.valueOf(a)