题中使用for中if判断结果错误

如果输入9,我觉得m=3时,sum=9,if会让for循环跳出,此时m=3,出来后打印m-1应该是2呀,结果输出为3,我试着打印m发现为4,就没法理解怎么回事,跳出来m++不是不会执行吗
问题如下

img

#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循环外边

img


其时打印出来看看就懂了

把p=1,提到第一个for循环里面就解决了

img

img

有用记得给个采纳呐

你第二个for语句应该是为了做单次阶层用的,但是你的结果没有被保留下来,具体体现在每次循环的过程中p都先被赋初值为1.你可以把这个赋初值放在外面,具体什么地方你自己思考思考