C语言计算一个数的阶乘的程序,为什么只能算到31?

#include<stdio.h>
int reslut(int n)
{
    int end;
    if(n<0)
    {
        printf("输入错误!\n");
        return 0;
    }
    else if(n==0||n==1)
    {
        end=1;
    }
    else
    {
        end=reslut(n-1)*n;
    }
    return end;
}
int main()
{
    int x;
    scanf("%d",&x);
    printf("%d的阶乘是%d\n",x,reslut(x));
    return 0;
}

为什么只能算到31?32、33的时候显示结果为一个负数,34以及更大的数显示结果为0。小白求教,不懂为什么。

TYUTssh
浏览 2665回答 2
2回答

紫泉

31!的阶乘已经超过int的最大值了,int的最大值为2的31次方-1,超过的时候就会溢出,变成负数。可以将int改成long,或是long long

TYUTssh

rusult写错了,见谅
打开App,查看更多内容
随时随地看视频慕课网APP