求阶乘没必要弄这么复杂,你非要用递归算法求阶乘也行,问题出在输入负数时,要有c语言终止程序的代码。
这段代码就是:exit(-1);
不过源程序还是有问题,如果阶乘的最终结果数值非常大时,超出int的表示范围,就会出错。
这就需要修改数据类型int为double,这里给出更简单的代码:
得到正确的运行结果:
代码里本来就没有指定参数为负数时的返回值
C语言阶乘为什么填入任何负数结果都为8?
求阶乘没必要弄这么复杂,你非要用递归算法求阶乘也行,问题出在输入负数时,要有c语言终止程序的代码。这段代码就是:exit(-1);修改源程序 得到正确结果 在整数表示范围内得到正确结果 不过源程序还是有问题,如果阶乘的最终结果数值非常大时,超出int的表示范围,就会出错。超出整数表示范围得到错误结...
C语言程序求阶乘的和为什么结果不正确
在编写C语言程序用于计算阶乘和时,确保初始化变量是关键步骤。在循环语句for(j=1;j<=i;j++)之前,应该将sum1 = 1;赋值语句加入,以确保在循环开始时,sum1的值为1。问题通常出现在循环执行的初始阶段。在进行j循环之前,期望sum1的值为1,而不是其他数值。然而,当i循环执行第二次时,sum1的...
c语言如何计算阶乘?
scanf("%d", &num);\/\/ 检查输入是否为负数 if (num < 0) { printf("抱歉,阶乘不适用于负数。\\n");} else { \/\/ 计算阶乘 for (int i = 1; i <= num; ++i) { factorial *= i;} \/\/ 输出结果 printf("%d的阶乘是%llu。\\n", num, factorial);} return 0;} 使用递归计算阶...
C语言,dev cpp,编写的计算阶乘程序,数值较大时输出不正确,求助._百度知...
而unsigned long long,C中就没有这种数据类型。而double就不同了,它能有15-16位有效数字,记数能记录到10^308,所以能够计算13!,但是也不会算的太大,一般也就到20!左右,毕竟阶乘数字增加的太猛啦!C语言当数字超过它的记录范围时不会报错,而是出现错误的数字,这要靠操作都判断,千万不要...
大学C语言的题,阶乘为什么完全不同
原始用的是double类型 存储的是浮点数 也就是近似值 而后来用long 存储的是精确值 更重要的是 long 的最大范围是2^31-1=2147483647 而13!=6227020800 明显是大于long的最大值的 所以用后来的方法 会导致越界 自然结果就是错的了。
c语言计算阶乘 那错了
include "stdio.h"main(){ long s=1;int i;for(i=1;i<=8;i++)s*=i ;printf("%ld",s);\/\/格式说明符,s是长整型,} 7的时候没超出范围,乘了8就超出int范围了
求助 用C语言求阶乘!
其实你编写的程序没有错误(把你的补充s=1加上)只不过是16以上的阶乘已经超出了 int 型所表示的范围(-32768~32768),所 以发生数据溢出,将显示负结果。由于n的阶乘相当于n前边阶乘的n倍,即使使 用长整型,也不能容纳如此庞大的数据(n>20情况下)。
C语言算阶乘有问题
你的错在i<=fa 每次运行,它就变了,所以越来越大。超出了整数,第一位变1,就是负,这个数据问什么这么大,之后怎么显示,你去看c讲数据那一章吧。不赘述了,我也记不清···在for之前 int er=fa 循环条件 i<=er
c语言计算阶乘程序这个怎么输入数字后什么都没输出?
1.双精度的显示%f,或者%lf。2.double factorial (int n){ double result = 1.0;while ( n > 1&& n < 170) \/\/ 这是不让N超过169?别让你的程序陷入死循环。result *= n--; \/\/乘的最大数得是N本身。return (result);}
C语言阶乘问题
结果超出了整形能表示的这个范围。还有~~~1个字节=8位,所以楼上的那个回答明显是错误的~~~4字节=32位,最高位用作符号位,所以整形能表示的最大数据范围应该是2的31次方减一 另外~~~using namespace std;也不是引用头文件,是引用名空间,名空间是在C++中才加入的性质,C语言中是没有的。