第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

下面這段代碼里面為什么計算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字節(jié),也就是占用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了?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號