看板 C_and_CPP 關於我們 聯絡資訊
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 關於printf 要算1的三次方加到X的三次方 範圍由一到50000 希望得到的正確結果: 程式跑出來的錯誤結果: 輸入50000顯示的答案部隊 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) dev c 有問題的code: (請善用置底文標色功能) #include<stdio.h> main(){ long long unsigned input=0; long long unsigned sum=0,n; while(scanf("%llu",&input)==1){ if(input<1 || input>50000){ break; } sum = (input*input*(input+1)*(input+1))/4; printf("%llu\n",sum); } return 0; } 補充說明: %llu是網路上查到的 應該是long long unsigned 但輸入50000時還是會出錯 我50000 跑出來是3306776128 49999 跑出來是4034958912 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.176.208
tinlans:所以你顯示出來到底是多少?還有變數宣告沒 unsigned。 09/17 16:23
※ 編輯: leo770429 來自: 140.117.176.208 (09/17 16:48)
loveme00835:我跑出來的結果 (50000)1562562500625000000 09/17 17:01
loveme00835: (49999)1562437500625000000 09/17 17:02
loveme00835:不過我是當C++來編 XD 09/17 17:08
tinlans:http://tinyurl.com/32p23ut 09/17 17:52
tinlans:疑似是這個問題。 09/17 17:52
tinlans:我在 FreeBSD 下直接用 gcc 編跑出來跟樓上一樣。 09/17 17:53
xatier:答案部隊 XD 09/17 17:58
LoveBeef:我的結果跟三樓.四樓一樣 (50001)1562687508125150001 09/17 19:16
LoveBeef: (49999)1562312508124850001 09/17 19:17
LoveBeef:樓上19:17打錯,更正如右: (49998)1562312508124850001 09/17 19:19
LoveBeef:我用自己的寫法寫的 a piece of cake?! 09/17 19:19
LoveBeef:(我的答案應該沒錯吧?!) 09/17 19:20
leo770429:謝謝五樓 改%I64d就可以了 09/17 20:47
leo770429:有人能解釋一下%I64d的意思嗎 09/17 20:47
sunneo:就是int64的decimal 09/17 22:09
xatier:噢不!那是痿軟的規格! 09/18 13:56
mythnc:好像可以不用unsigned 09/19 10:06