我试图写一个C程序,可以计算用户输入的数字的阶乘。我有下面的程序,它似乎工作正常,没有任何错误。但是,我输入的每一个数字,如5,我得到一个奇怪的答案,如-1899959296。
我似乎找不到错误在哪里,更不用说答案是否定的了。任何帮助都将不胜感激,非常感谢。
int main()
{
int inputnumber;
int n;
printf("\nThis program is a factorial calculator. Input a number below to finds its factorial: ");
scanf("%i", &inputnumber);
//A 'for' loop repeats the same contained statements until a condition is met.
//A general form of a 'for' statements is shown below:
// for( initial values; loop condition; loop expression)
for (n = 1; n <= inputnumber; n++)
{
inputnumber = inputnumber * n;
}
printf("\nThe answer is %i", inputnumber);
return 0;
}
我试图做一个阶乘程序,但所有输入的数字都给予了非常错误的答案。
2条答案
按热度按时间omhiaaxx1#
问题出在代码的这一部分:
当
n > 1
时,循环内的代码增加inputnumber
。这导致循环运行的时间比预期长得多,因为n <= inputnumber
(循环条件)总是满足的,直到出现整数溢出,即当inputnumber < 0
时。因此,循环仅在inputnumber
变为负值时停止。要解决此问题,您应将阶乘结果存储为单独的变量,例如:
int result = 1;
然后将循环更新为
result *= n;
(当然也相应地更改print语句)。1cosmwyk2#
如果你改变了for循环的条件部分,只限制为〈而不是〈=,它应该会产生正确的答案。
例如,假设输入:"2"的结果为"4":
或者通过使用第三个变量,您可以使用当前逻辑:#包括<stdio.h>