1*1!+2*2!+3*3!+、、、+n*n!

问题八: f=1!-1/2!+1/3!-1/4!+...+1/n!(n为一定大的数,太大了会溢出)
/***************************************************************
&&&&&&&&&&&&& 累加(C语言)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& AUTHOR:liuyongshui
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& DATE:********
&***************************************************************/
&&& 问题八: f=1!-1/2!+1/3!-1/4!+...+1/n!(n为一定大的数,太大了会溢出)
#include &stdio.h&
void f(int m);&&&&& //原函数声明
int main()
&&& printf(&请输入一个数(不能太大):&);
&&& scanf(&%d&, &n);
&&& f(n);&&&& //把n带入f()函数
&&& return 0;
// f()函数定义
void f(int m)
&&&&& int s=1;
&&&&& int k=1;&
&&&&& double sum=0.0;&
&&&&& for(i=1; i&=m; i++)
&&&&&&&&& for(j=1; j&=i; j++)
&&&&&&&&& {
&&&&&&&&&&&&& s*=j;&&&&& //计算i!
&&&&&&&&& }
&&&&&&&&& sum+=1.0/s*k;&&& //sum=sum+1.0/s;
&&&&&&&&& k=-1*k;&&& //改变k的符号
&&&&&&&&& s=1;&&& //算完i!后,s赋值为1
&&&&& printf(&%lf\n&, sum);&&& //输出结果
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'C语言网训练场(21)
求1+2!+3!+...+N!的和
正整数N(N〈=20)
1+2!+3!+...+N!的和 (结果为整数形式)
这道题目,看提交和通过率1/5吧,所以发出来了。
我觉得他们是不知道怎么存储20的阶乘,因为这个数据是很大的,暂且不说还要累加。
由于OJ系统不同,要用lld%,但是我自身编译器使用lld%,是有点问题的,但是在OJ上通过了。
&span style=&font-size:18&&
#include&stdio.h&
//递归求阶乘
unsigned long long facto(int n)
if (n == 1)
return n*facto(n - 1);
int main()
unsigned long long的最大值:
__int64的最大值:4775807
unsigned long long sum = 0;
scanf(&%lld&, &n);
for (int i = 1; i &= i ++)
sum += facto(i);
printf(&%lld\n&, sum);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:14325次
排名:千里之外
原创:48篇
(3)(45)(3)

我要回帖

 

随机推荐