为了账号安全,请及时绑定邮箱和手机立即绑定

下面这段代码里面为什么计算30的阶乘的时候是对的, 31的时候就开始为负了,到34的时候就为0了?

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

正在回答

3 回答

int类型前面讲过是4字节,也就是占用32位,有符号,因此取值范围是-2^31~2^32-1,也就是-2147483648~2147483647,你算的数远远超出了这个范围,早就有问题了。一个位中放一个1或0;前面的一些超出位的被自动舍弃,导致第一位可能是1或0,因此异常数据有时是正数、有时是负数。确切来讲,在这个程序中,n>=14都是错误的。

1 回复 有任何疑惑可以回复我~

是因为最后值超出int取值范围 导致数据溢出了么?

0 回复 有任何疑惑可以回复我~

我运行你的函数。没有抱错。http://img1.sycdn.imooc.com//56c6bf1300014ef607480598.jpg。。直接复制的

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

下面这段代码里面为什么计算30的阶乘的时候是对的, 31的时候就开始为负了,到34的时候就为0了?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信