编程:输入n,计算n!
#include
int main()
{ int i;long n,fact;
printf("请输入n的值:");
scanf("%ld",&n);
if(n=0)
fact=1;
else if(n>0)
i=2,fact=1;
while(i<=n)
{ fact=fact*i;
i=i+1;
}
printf("%ld!=%ld\n",n,fact);
return 0;
}
我觉得0!需要单独提出来,但为什么运行的时候计算为0,并且大于0的阶层无法计算
并且让我不太理解的是对于n为正整数阶层的计算,当n=1的计算是怎么出来的,是直接默认此时fact就为初始赋的值1吗?
如果是这样那我n=0的情况为啥不能这样进行编写
还有哦一般条件下变量的定义是double还是float型没太大的要求是吗?
#include<stdio.h>
int main()
{ int i=1;long n,fact=1;
printf("请输入n的值:");
scanf("%ld",&n);
if(n>0){
i=2;
}
while(i<=n)
{ fact=fact*i;
i=i+1;
}
printf("%ld!=%ld\n",n,fact);
return 0;
}
第6行if(n=0) 改成 if(n==0) 你写的是赋值,不是比较。
n=1就默认结果fact为1了,它这里实际主要计算>=2的,因为比如是4,计算4!=4 * 3 * 2即可,因为再 * 1与不乘没区别。
求n!一般都是整型吧,还是别用float、double,如果用了你scanf内又是接受%ld,不一致。
问题1: 代码中if (n=0)错误,这是赋值语句,而非判断语句,正确写法是if (n==0)
问题2: 对于n=0的情况,代码中已将fact的值设置为1,但是在后面的循环中fact的值没有被修改,因此没有正确输出。
问题3: 对于n=1的情况,fact的值是在初始化赋值为1,并未在循环中进行修改。
问题4: 变量的类型可以根据需要选择float或double,如果要保存较大的数字可以使用double,如果要保存较小的数字可以使用float。但是,计算阶乘可能会超出float的表示范围,因此在这种情况下应该使用double或其他数字类型。