蓝桥杯2023年第十四届省赛真题-阶乘求和

一、题目 

【问题描述】

令 S = 1 ! + 2 ! + 3 ! + . . . + 202320232023 ! S = 1! + 2! + 3! + ... + 202320232023!S=1!+2!+3!+...+202320232023!,求 S SS 的末尾 9 位数字。 提示:答案首位不为 0。

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分

二、思路

        我自己想的时候是直接去计算1~202320232023的阶乘,可是202320232023超过了int的范围,也超过了long的范围,于是查看了答案,目前有两种思路:

        1.法一

        我们可以看到从39的阶乘之后后9位的阶乘都是0,(这也是题目中为啥让我们算末尾9位数了,相当于不用加40,41,42...等的阶乘),转化为,求1~39的阶乘和。

各阶乘数
10! 3628800
20! 2432902008176640000
30!                                            265252859812191058636308 480000000
...
39!                 20397882081197443358640281739902897356 800000000
40!               815915283247897734345611269596115894272 000000000
41!          33452526613163807108170062053440751665152 000000000
42!       1405006117752879898543142606244511569936384 000000000
43!     60415263063373835637355132068513997507264512 000000000
44! 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)

相关推荐

  1. 2023-求和

    2024-03-21 23:28:01       64 阅读
  2. 2023----棋盘

    2024-03-21 23:28:01       61 阅读
  3. 2023-飞机降落

    2024-03-21 23:28:01       53 阅读
  4. 2023-飞机降落

    2024-03-21 23:28:01       37 阅读
  5. C语言-2023-砍树

    2024-03-21 23:28:01       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-21 23:28:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-21 23:28:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-21 23:28:01       82 阅读
  4. Python语言-面向对象

    2024-03-21 23:28:01       91 阅读

热门阅读

  1. transformer的自注意力模型如何实现自注意力

    2024-03-21 23:28:01       48 阅读
  2. CentOS 8 中安装与配置 MySQL

    2024-03-21 23:28:01       43 阅读
  3. OpenCV图像处理模块详解

    2024-03-21 23:28:01       45 阅读
  4. C语言向C++过渡的基础知识(一)

    2024-03-21 23:28:01       48 阅读
  5. QT5信号函数的绑定方式

    2024-03-21 23:28:01       45 阅读
  6. SpringWeb

    SpringWeb

    2024-03-21 23:28:01      35 阅读
  7. 笔记:Mysql 主从搭建

    2024-03-21 23:28:01       42 阅读
  8. 椋鸟数据结构笔记#1:数据结构、顺序表

    2024-03-21 23:28:01       45 阅读
  9. SpringBoot注解

    2024-03-21 23:28:01       47 阅读
  10. 蓝桥杯算法基础(28)11道关于字符串的小题

    2024-03-21 23:28:01       36 阅读