C语言编程,求1!+2!+3!+......+20!,用到函数

如题所述

第1个回答  2011-05-10
你好!

请参考:
#include <stdio.h>

double fac(int n)
{
return n > 1 ? n * fac(n-1) : 1;
}

double _facsum(double x, double y)
{
return y > 1 ? _facsum((x+1)*(y-1), y-1) : x;
}

double facsum(double x)
{
return _facsum(x, x);
}

int main()
{
printf("%.f\n", facsum(20)); // 1! + 2! + 3!+...+20!
return 0;
}
#include <iostream>

double fac(int n)
{
return n > 1 ? n * fac(n-1) : 1;
}

double _facsum(double x, double y)
{
return y > 1 ? _facsum((x+1)*(y-1), y-1) : x;
}

double facsum(double x)
{
return _facsum(x, x);
}

int main()
{
std::cout.setf(std::ios::fixed, std::ios::floatfield);
std::cout << facsum(20); // 1! + 2! + 3!+...+20!
return 0;
}
迭代版:
#include <iostream>

int main()
{
int i, j;
double k, sum;
for(sum = 0, i = 1; i <= 20; ++i) { // 1! + 2! + 3!+...+20!
for(k = 1, j = i; j >= 1; --j)
k *= j;
sum += k;
}
std::cout.setf(std::ios::fixed, std::ios::floatfield);
std::cout << sum;
return 0;
}
第2个回答  2011-05-10
代码如下:
//***************************************************************************************
//***************************************************************************************
#include <stdio.h>
int main()
{
int i=0;
long temp=1;
long sum=0;
for(i=1;i<=20;i++)
{
temp*=i;
sum+=temp;
}
printf("sum=%ld\n",sum);
return 0;
}
//***************************************************************************************
//***************************************************************************************
_________________
cl之后,执行:
_________________

Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

baidu.c
Microsoft (R) Incremental Linker Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

/out:baidu.exe
baidu.obj
sum=268040729

请按 ENTER 或其它命令继续
_________________
to 楼上:
你的for里边的sum1每次重新从1开始算,很浪费的,直接用上一次的结果就行.
第3个回答  2011-05-10
#include <stdio.h>
long foo(int n)
{
if (1 == n)
return 1;
return n * foo(n - 1);
}

int main(void)
{
int i;
long sum = 0;
for (i = 1; i <= 3; i++)
{
sum += foo(i);
}
printf("总和是%ld\n", sum);

return 0;
}
第4个回答  2011-05-10
unsigned long long f(int n)
{
unsigned long long sum=0,t=1;
for(int i=1;i<=n;t*=i++,sum+=t);
return sum;
}
main()
{
printf("%lld", f(20) );
}
第5个回答  2011-05-10
long long f(int n)
{
if(n<=1) return 1;

long long r=1;
for(int i=2;i<=n;i++)
r*= i;
return r;
}

void main()
{
long long sum =0;
for(int i=1;i<=20;i++)
sum += f(n);
}本回答被提问者采纳

1!+2!+3!+…… +20!
以下是用C语言编程求出1!+2!+3!+……+20!的值示例代码 include<stdio.h> int main(){ int i,j;long sum,k;sum=0;for(i=1;i<=20;i++){ k=1;for(j=1;j<=i;j++){ k=k*j;} sum=sum+k;} printf("1+2!+3!+…+20!=%d",sum);} ...

1+2!+3!+…… +20!
以下是用C语言编程求出1!+2!+3!+……+20!的值示例代码:include <stdio.h> int main(){ int i,j;long sum,k;sum=0;for(i=1;i<=20;i++){k=1;for(j=1;j<=i;j++){ k=k*j;} sum=sum+k;} printf("1+2!+3!+…+20!=%d",sum);} ...

c语言1!+2!+3!…+20!等于?
C语言不支持大整数,这个已经是可以直接计算的极限了。

1.求1+2!+3!+...+20!的和 用c语言编程。
include<stdio.h>double fac(int n){double f=1; while(n)f*=n--; return f;}int main(){int i=1; double s=0; while(i<21) s+=fac(i++); printf("%.0lf\\n",s); return 0;}

c语言程序1+2!+3!...+20!
以下是C语言程序计算1+2!+3!...+20!的结果:♡♡ 有帮助到的话,麻烦采纳哦!♡♡

用C语言\/*求1+2!+3!+...+20!的和*\/
1、首先,定义三个整型变量,保存项数、算式的总和、每一项的和。2、接着,将算式的总和设置为0。3、读入算式的项数,保存在变量n中。4、用for循环判断,条件是i的值小于等于n,即实现各项的总和。5、在每次执行外侧循环时,设置sum2的初始值为0。6、用for语句执行内部的循环,计算每一个小项的和...

用C语言编写求和s=1!+2!+3!+...+n!
题目:求1+2!+3!+...+20!的和 1.程序分析:此程序只是把累加变成了累乘。2.程序源代码:main(){ float n,s=0,t=1;for(n=1;n<=20;n++){ t*=n;s+=t;} printf("1+2!+3!...+20!=%e\\n",s);}

c语言 1!+2!+3!+……20! 用函数递归法
h>#include<stdlib.h>int jc(int n){int i = 1,result=1;for (i = 1; i <= n; i++){result *= i;}return result;}int jcsum(int n){if (n== 1){return 1;}else{return jc(n) + jcsum(n - 1);}}void main(){int result = 0;result = jcsum(20);printf("1到...

求前20的阶乘(即求1!+2!+3!+、、、+20!){要求是用C语言中的循环指令编...
你好,程序如下: #include<stdio.h> void main(){ long i,j,sum;for(i=1,j=1,sum=1;i<=4;i++){ j=j*i;sum+=j;} printf("1!+2!+3!+...+20! = %ld\\n",sum-1);} 有疑问提出。望采纳。

关于C语言编程计算1!+2!+3!+…+20!。的问题!
printf("1!+2!+...+20!=%ld\\n",t);ld 是以双精度浮点型输出, 不知道你是否为你的笔误,输出的应该是 s 吧.用断点调试可以看到: 在进行第14次运算的时候,s的值已经为负,说明s的值已经超越了long的最大值,而你输出的是 t ,表面上看n=19时输出的是正值,好像是正确的,其实 t 的值在...

相似回答
大家正在搜