C中数字的阶乘

Factorial of a number in C

所以我正在编写一个程序来在 C 中打印数字的阶乘。我的代码 -

#include <stdio.h>
int main(void)
{
    int a,i ;
    printf("Enter the number = ");
    scanf("%d", &a);

    for(i=1; i<a; i++)
    {
        a = a*i;
    }
    printf("The factorial of the given number is = %d\n",a);
}

现在这个程序正在打印一些垃圾值。我问了一些朋友,他们说要为阶乘添加另一个变量并使用带有那个阶乘变量的循环,但是 none 他们知道为什么这段代码是错误的。

我的问题是为什么这段代码是错误的?这个 For 循环在这里做什么,为什么它不打印数字的阶乘,而是打印一些垃圾值?

预期输出-

Enter the number = 5
The factorial of the given number is = 120

我得到的输出是-

Enter the number = 5
The factorial of the given number is = -1899959296

因为当您递增变量 a 时,for 循环条件会发生变化。 你有 i 必须小于 a,但增加 a 将导致条件始终为真。 您必须将值保存在另一个变量中,如下所示:

#include <stdio.h>
int main(void)
{
    int a, i;

    printf("Enter the number = ");
    scanf("%d", &a);
    int result = a;
    
    for(i=1; i<a; i++){
        result = result*i;
    }
    
    printf("The factorial of the given number is = %d \n", result);
}