C語言程式設計後Linux終端計算n 13的階乘無法得到正確答案,是因為什麼原因?

時間 2021-05-31 12:48:18

1樓:北極蝦

int型變數的長度一般是4個Byte(64位系統是8個,具體取決於程式的執行環境),4 Byte=4 * 8 bit,每個bit可以表示兩個值0和1,就像一盞燈泡有兩種狀態一樣(亮和滅),那麼32 bit可以表示多少個數呢,想象一下,32盞燈泡一字擺開,每個燈泡可以表示兩個值,32個可以表示2的32次方共計***個數。

這裡你使用的是int,即有符號的整數(無符號是unsigned int),它的取值包括負數、0和正數,如果把0看做特殊的正數,那麼一分為二,int可以表示的正負數分別有4294967296 / 2 = 2147483648個,取值區間[-2147483648,2147483647],因為有數字0,所以正數比負數少乙個。(unsigned int取值是[0, 4294967295])

13的階乘是6,227,020,800,超過了區間[-2147483648,2147483647],因此你的程式無法得到正確的結果。

至於你提到的輸出100階乘的前100位,他是用int[200]來表示計算結果的,也就是說用200個int分別表示計算結果的每一位(個、十、百、千。。。),而不是用1個int表示最終的結果。

乙個int儲存區間是有限的,但是多個int就是無限的。就像小時候用手指頭算數一樣,乙隻手不夠用兩隻,兩隻不夠就上腳。

2樓:靈劍

我就是口算我也能估的出來13!大約是13^13/e^13*根號下26π,e^2是8不到一點所以e^13大約是2^19量級,分子是大約100/8的13次方,根號下26π大約是9,除完是9乘以10^26除以2的58次方,大約2的32次方,int最大表示2^31次方,顯然越界了。人家能算前100位,誰告訴你他們用的int。

c語言程式設計 開頭的 include stdio h 是什麼意思?

哈哈 stdio 就是指 standard input output 標準輸入輸出 std代表著 標準的 i 是 輸入 o 是 輸出 h 是 標頭檔案 乙個愛狗的男生 include include 在系統目錄下尋找你引入的檔案,例如stdlib.h include 在當前的目錄下尋找你引入的檔案,...

自學程式設計 c語言 可能嗎?

fl.ush 太可能啦,我自學了4門語言,從事程式設計工作十年了。我經歷了從小學到大學堅持不懈的學程式設計,而且什麼都沒有學會,因為沒人教。但是那些日子的空想,讓我後來的學習變得更有效率。只要努力了,總會離目標做來越近! wy1998 zh 先設定學習的目標,然後認清自己的基礎,對照知乎上的學習書籍...

c語言程式設計怎麼搞?

快樂種牛人 雖然不知道還來不來得及 我給乙個最樸實無華的做法吧 100到999之間水仙花數的判定 好,那我們先來乙個for迴圈 for inti 100 i 1000 i 第乙個要求簡單,就不說了。第二個要求,將判斷出來的水仙花數放到陣列中 int solve int val 判斷是否水仙花數for...