c# 为什么我的析因程序不能得出正确的答案?

t0ybt7op  于 2023-01-15  发布在  C#
关注(0)|答案(2)|浏览(211)

我试图写一个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;
}

我试图做一个阶乘程序,但所有输入的数字都给予了非常错误的答案。

omhiaaxx

omhiaaxx1#

问题出在代码的这一部分:

for (n = 1; n <= inputnumber; n++)
{
    inputnumber = inputnumber * n;
}

n > 1时,循环内的代码增加inputnumber。这导致循环运行的时间比预期长得多,因为n <= inputnumber(循环条件)总是满足的,直到出现整数溢出,即当inputnumber < 0时。因此,循环仅在inputnumber变为负值时停止。
要解决此问题,您应将阶乘结果存储为单独的变量,例如:
int result = 1;
然后将循环更新为result *= n;(当然也相应地更改print语句)。

1cosmwyk

1cosmwyk2#

如果你改变了for循环的条件部分,只限制为〈而不是〈=,它应该会产生正确的答案。
例如,假设输入:"2"的结果为"4":

input = 2 * 1
input = 2 * 2
end
return input

或者通过使用第三个变量,您可以使用当前逻辑:#包括<stdio.h>

int main() {
    int number, i, factorial = 1;
    printf("Enter an integer: ");
    scanf("%d", &number);
    for (i = 1; i <= number; i++) {
        factorial *= i;
    }
    printf("Factorial of %d = %d\n", number, factorial);
    return 0;
}

相关问题