如果输入9,我觉得m=3时,sum=9,if会让for循环跳出,此时m=3,出来后打印m-1应该是2呀,结果输出为3,我试着打印m发现为4,就没法理解怎么回事,跳出来m++不是不会执行吗
问题如下
#include
int main(void)
{
int n;
int m;
int p;
int i;
int sum=0;
scanf("%d",&n);
for(m=1; ; m++)
{
for(i=1; i<=m; i++)
{
p=1;
p=p*i;
}
sum = sum+p;
if(sum >= n)
{
printf("%d\n",m);
break;
}
}
printf("%d",(m-1));
return 0;
}
输入9
输出
4
3
for(i=1; i<=m; i++)
{
p=1;
p=p*i;
}
这不白忙乎了么,p每次先设置为1,再相乘,最后p就是m
做阶乘应该将p=1放到for循环外边
把p=1,提到第一个for循环里面就解决了
有用记得给个采纳呐
你第二个for语句应该是为了做单次阶层用的,但是你的结果没有被保留下来,具体体现在每次循环的过程中p都先被赋初值为1.你可以把这个赋初值放在外面,具体什么地方你自己思考思考