阶乘运算时使用int定义结果,输出受限

阶乘超过13后结果就出错

include  
int main()
{
    int i,p,q;
    i=2;
    q=1;
    printf("输入一个小于13的正整数:\n");
    scanf("%d",&p);
    if(p>=13||p<=0)                                //去除无法计算的输入
    printf("无法计算该阶乘\n");
    else {
        while (i<=p)
        {
            q=q*i;
            i=i+1;
        }
        printf("%d的阶乘结果为%d\n",p,q);
    }
    return 0;
}


img

int定义的值我记得最多2^32-1位数,应该换什么才能改变这个情况,计算大于等于13后的阶乘

你都知道int型太小了,那就换大类型啊
long,long long,double,decimal,很多类型可以用啊

把定义的int换成long,后面输出的%d换成%ld就好,定义长整型

13的阶乘超出int取值范围,改用long long类型。

unsigned int 的取值范围 0 ~ 2^32-1,13的阶乘已经超过这个类型的最大值了,如果还想要再大的整数,就只有 long long 了,8个字节的