c语言 1到20的阶乘之和

//c4-8.c#include<stdio.h>intmain(){inti,p,sum=0;for(i=1;i<=20;i++){while(i>=1){p=1;p*... //c4-8.c
#include<stdio.h>
int main ()
{ int i,p,sum=0;
for(i=1;i<=20;i++)
{ while(i>=1)
{ p=1;
p*=i;
i-=1;
}
sum+=p;
}
printf("sum=%d\n",sum);
return 0;
}
错在哪
展开
 我来答
My_Persistence
2017-06-29 · TA获得超过3466个赞
知道大有可为答主
回答量:1201
采纳率:81%
帮助的人:418万
展开全部
/**
**程序描述:求求1~20的阶乘之和。
**算法思路:先求出每一项的阶乘值,然后将所有项的阶乘值相加。
*/
#include <stdio.h>
#define N 20
typedef unsigned long long uInt64;  //自定义类型
//求出每一项阶乘值的函数
uInt64 fact(int n)
{
    int i;
    uInt64 s;
    for(i=s=1;i<=n;i++)
        s*=i;   //从1开始循环累加相乘
    return s;
}
 
int main()
{
    uInt64 s;
    int i;
    for(i=1,s=0;i<=N;i++)
        s+=fact(i);     //从第1项开始循环累加每一项的阶乘值
    printf("1!+2!+3!+……+20!=%llu\n",s);
    return 0;
}

匿名用户
2014-12-08
展开全部

i始终大于1,会出现死循环的,同时,20的阶乘相加,那结果会很大的,用int保存不下,得用double类型!示例代码,有问题再用度娘自己搜索吧。。

//win7 x64 + vc6.0编译通过
#include<stdio.h>
#include "stdlib.h"
int main()
{
double fac(int n);
double sum=0,m;
    int i;
for(i=1;i<=20;i++)
m=fac(i);
sum+=m;
printf("%0.lf\n",sum);
system("pause");
}
double fac( int n)
{
double m;
if (n==1)
m=1;
else m=fac(n-1)*n;
return(m);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
文大宽
2014-11-23 · TA获得超过131个赞
知道小有建树答主
回答量:124
采纳率:0%
帮助的人:80.1万
展开全部
你的程序有点乱,也有的错的地方,比如一开始的int unit51()不应该是int main()吗?还有倒数第三行printf("1到20的阶乘和为:\n",sum);也是错的,应该改为printf("1到20的阶乘和为:%d\n",sum);但是貌似这样最后输出的也只有一个数而不是1到20的阶乘,最后一点,20的阶乘是一个非常大的数,用int根本不行。程序就不给你改了,需要的话我给你写一个。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-12-15
展开全部
#include<stdio.h>void main()
{
int i;
double t=1,sum=0; //由于20的阶乘int和long int都放不下.所以用double.
for(i=1;i<=20;i++) //从1循环到20.
{
t = t * i; //计算1~20的阶乘.
sum = sum + t; //将1~20的阶乘累加到sum中.
}
printf("%.0f\n",sum); //输出sum.
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Negamax
2012-04-19 · TA获得超过2721个赞
知道小有建树答主
回答量:656
采纳率:100%
帮助的人:282万
展开全部
2432902008176640000
请按任意键继续. . .

代码:
#include<stdio.h>
#include "stdlib.h"
int main()
{
double fac(int n);
double sum=0,m;
int i;
for(i=1;i<=20;i++)
m=fac(i);
sum+=m;
printf("%0.lf\n",sum);
system("pause");
}
double fac( int n)
{
double m;
if (n==1)
m=1;
else m=fac(n-1)*n;
return(m);
}

你求的是阶乘的累加和。20项很大了,查过了整形的范围了。用double就可以了。
在就是 递归表达式:
n==1 return 1
else
return n*f(n-1)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式