c语言求1-1/2!+1/3!-1/4!+1/5! ...+1/n!

这样写为什么错?#include<stdio.h>#include<math.h>voidmain(){intt;scanf("%d",&t);inti,sum,f=1,... 这样写为什么错?
#include<stdio.h>
#include<math.h>
void main()
{
int t;
scanf("%d",&t);
int i,sum,f=1,n,b;
for(i=1,sum=0;i<=t;i++,f=1)
{
for(n=i;n>0;--n)
{
f*=n;
}
b=pow(-1,i+1)*1.0/f;
sum=sum+b;

}
printf("%d\n",sum);
}
展开
 我来答
kaixingui2012
2012-11-08 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6445万
展开全部
你的变量不能定义成int类型
你后面的运算都是浮点型的数据,而且结果都是小数,所以,修改一下
int i,f=1,n;
double b,sum;

printf("%lf\n",sum);

完整代码
#include<stdio.h>
#include<math.h>
int main()
{
int t;
scanf("%d",&t);
int i,f=1,n;
double b,sum;
for(i=1,sum=0;i<=t;i++,f=1)
{
for(n=i;n>0;--n)
{
f*=n;
}
b=pow(-1,i+1)*1.0/f;
sum=sum+b;
}
printf("%lf\n",sum);
return 0;
}
蜗牛去旅行333
2019-08-05 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.2万
采纳率:28%
帮助的人:834万
展开全部
for(n=i;n>0;--n)
{
f*=n;
}
每次都计算n!,计算量很大,这里有个小技巧
上一次计算的n!在诚意n+1那么就是这一次的(n+1)!
刚好每次变化,i都会加1,所以f的值乘以i就是这一次的n!的值
int
flag=1;
for(i=1,sum=0;i<=t;i++)
{
f*=n;
//这个就是计算n!
sum+=flag*1.0/f;
flag*=-1;
//这里就是那个正负号的变化
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cpucash
2012-11-08 · TA获得超过1584个赞
知道小有建树答主
回答量:1457
采纳率:66%
帮助的人:970万
展开全部
for(n=i;n>0;--n)
{
f*=n;
}

每次都计算n!,计算量很大,这里有个小技巧
上一次计算的n!在诚意n+1那么就是这一次的(n+1)!
刚好每次变化,i都会加1,所以f的值乘以i就是这一次的n!的值
int flag=1;

for(i=1,sum=0;i<=t;i++)
{
f*=n; //这个就是计算n!

sum+=flag*1.0/f;
flag*=-1; //这里就是那个正负号的变化

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qyxqyxqyxqy
2012-11-08 · 超过11用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:33.6万
展开全部
f=1错,每次循环f都置成1了,f就不是阶乘了啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式