C语言 N阶层代码?什么错误?

来源:百度知道 编辑:UC知道 时间:2024/05/11 15:02:02
#include "stdio.h"
main()
{
int i,n;
printf("input number :");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
n*=i;
}
printf("%d \n",s);
}

#include "stdio.h"
main()
{
int i,n;
int s = 1; // 定义s保存积
printf("input number :");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
s *= i; //
}
printf("%d \n",s);
}

这样写当然不对了!你多乘了数了!你想如果我输入3,
第一次循环n=3*1,这时n=3,i++,i=2,i<=n,
第二次循环n=3*2,这时n=6,i++,i=3,
这时本来是我们要的结果,但是这时候 i=3,n=6,i仍然小于等于n, 还要循环!那就不对了!得到负数是因为int只占4个字节,结果大的存不下了就成了负数!而且应该只是小于没有等于!
你可以这样写:
#include <stdio.h>
void main()
{
int i,sum,t;
scanf("%d",&sum);
t=sum;
for (i=1;i<t;i++)
sum=sum*i;
printf("%d\n",sum);
}

s没定义,逻辑也有问题,

这样改:
1,int i,n; 改为int i,n,s=1;
2, n*=i; 改为 s*=i;