XYNUOJ 1078 连续自然数的阶乘求和

本篇介绍了一种使用C语言求解从1到20的连续自然数阶乘并进行求和的方法。文章中提供的示例代码利用了long long型变量来处理超出常规整数范围的大数运算问题。

1078: 习题5-6 连续自然数的阶乘求和 
时间限制: 1 Sec 内存限制: 12 MB 
提交: 263 解决: 38 
[提交][状态][讨论版] 
题目描述

求1!+2!+3!+…+20!,即求

提示:20!已超出整数的表示范围,故求阶乘时,需要将变量定义为double类型。

输入

输出

连续1~20的阶乘的和,末尾换行。

若结果定义为double类型,结果仅输出其整数部分(即保留0为小数)。

样例输入 

样例输出 
2561327494111820300

提示

C语言第四版教学实验-第五章 循环结构程序设计 
之前提交一直wa,后来发现可以用long long 
虽然运行结果跟给出的不一样,但是AC了

#include<stdio.h>
int main()
{
	double i=1;
	long long  sum;
	for(int j=1;j<=20;j++)
	{
		i*=j;
		sum+=i;
	}
	printf("%lld\n",sum);
}

计算连续自然数阶乘和有多种方法,以下是几种常见的实现方式: ### 使用递归函数 通过定义一个递归函数来计算单个数字的阶乘,然后对连续自然数进行求和。 ```python from __future__ import division def func(x): ''' 单个数字的阶乘函数 ''' return 1 if x == 1 else x * func(x - 1) def demo1(N=10): ''' 连续数值【可不连续】列表总阶乘和 ''' return sum(func(x) for x in range(1, N + 1)) print('N=10====>', demo1(N=10)) ``` 上述代码中,`func` 函数使用递归的方式计算单个数字的阶乘,`demo1` 函数通过 `sum` 函数对连续自然数阶乘进行求和 [^1]。 ### 借助 `reduce` 函数 利用 `reduce` 函数来计算单个数字的阶乘,然后对连续自然数进行求和。 ```python from functools import reduce def demo2(N=10): ''' 借助于 reduce 函数实现 ''' return sum([reduce(lambda x, y: x * y, range(1, i + 1)) for i in range(1, N + 1)]) print('N=10====>', demo2(N=10)) ``` 这里,`demo2` 函数使用 `reduce` 函数和 `lambda` 表达式计算每个数字的阶乘,最后通过 `sum` 函数求和 [^1]。 ### 借助 Python 内置阶乘函数 `factorial` 使用 `scipy.special` 模块中的 `factorial` 函数计算阶乘,然后求和。 ```python from scipy.special import factorial def demo3(N=10): ''' 借助于Python内置阶乘函数 factorial 实现 ''' return sum(factorial(range(1, N + 1), exact=True)) print('N=10====>', demo3(N=10)) ``` `demo3` 函数直接使用 `factorial` 函数计算连续自然数阶乘,再通过 `sum` 函数求和 [^1]。 ### 借助 `while` 循环 使用 `while` 循环计算连续自然数阶乘和。 ```python def func(x): ''' 单个数字的阶乘函数 ''' return 1 if x == 1 else x * func(x - 1) def demo4(N=10): ''' 借助于while实现 ''' total = 0 while N: total += func(N) N -= 1 return total print('N=10====>', demo4(N=10)) ``` `demo4` 函数使用 `while` 循环遍历连续自然数,调用 `func` 函数计算阶乘求和 [^1]。 ### Java 实现 在 Java 中可以使用特定的原理来计算连续自然数阶乘和,先求出一对数的乘积结果,再用该结果乘另一对(比该对小的)乘积结果。 ```java class Main { public static void main(String[] args) { int num = 10; long result = 1; while (num > 1) { result *= num * (num - 1); num -= 2; } if (num == 1) { result *= 1; } System.out.println("结果: " + result); } } ``` 此 Java 代码根据特定原理,通过循环和乘法运算计算连续自然数阶乘和 [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值