C语言用for循环算1!+2!+3!+4!+5! 我的程序为什么不对?

main(){inti,j,sum=0,s=1;for(i=1;i<=5;i++){for(j=1;j<=i;j++){s=s*j;sum=s+sum;}}printf(... main()
{int i,j,sum=0,s=1;
for(i=1;i<=5;i++)
{for(j=1;j<=i;j++)
{s=s*j;
sum=s+sum;}
}
printf("%d\n",sum);
}
展开
 我来答
KingWHYlove
2017-12-31
知道答主
回答量:9
采纳率:100%
帮助的人:5万
展开全部

很明显s的值一直在变大,而不是你想要的求!1,!2,!3,!4,!5后再相加,每次计算的时候s的值都是在累乘的,所以最后的结果肯定会偏大。

#include <stdio.h>
int main()

int i,j,sum=0,s=1; 
for(i=1;i<=5;i++) 
{
s=1;  //每次循环前先让s的值为初始值
for(j=1;j<=i;j++) 
{
s=s*j;
}     //这个循环用来计算!n的值
sum=s+sum;  //再把!n的值累加起来
}
printf("%d\n",sum); 

return 0;
}

更简便的方法

#include <stdio.h>
int main()

int i,j,sum=0,s=1; 
for(i=1;i<=5;i++) 
{
s=s*i;   //每一次s再多乘一个i就可以了
sum=s+sum;
}
printf("%d\n",sum);  //最后正确结果是153
return 0;
}
追问
s乘的次数不是由j决定的吗 i<=5, j 不也是运行5次,所以s最多不还是1*2*3*4*5的么
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式