[問題] pow奇怪的情況...

看板C_and_CPP (C/C++)作者 (路人)時間16年前 (2009/05/10 12:25), 編輯推噓7(707)
留言14則, 6人參與, 最新討論串1/2 (看更多)
就是我用不一樣的括號做pow會得到wa跟ac = = 原始題目 http://zerojudge.tw/ShowProblem?problemid=d213 WA (當輸入是53的時候 會wa) 與正確輸出不相符(line:54) 您的答案為: 35993612646875138 正確答案為: 35993612646875136 (我只能說非常邪門 我在windows跟fedora上跑都是正確答案 丟到zerojudge上就錯了...) #include<stdio.h> #include<math.h> int main(void) { unsigned long long int n, k; while(scanf("%llu\n" , &k) != EOF) { n = (pow(2, (k + 1)) - 1) * 2; if(k >= 10) { n = n - ((pow(2, (k - 9)) - 1) * 2); } printf("%llu\n" , n); } return 0; } ------------------------------- AC #include<stdio.h> #include<math.h> int main(void) { unsigned long long int n, k; while(scanf("%llu\n" , &k) != EOF) { n = (pow(2, (k + 1)) - 1) * 2; if(k >= 10) { k = pow(2, (k - 9)); n = n - ((k - 1) * 2); } printf("%llu\n" , n); } return 0; } -- 你讓我清楚的看見 星星在夜裡的善變 戀人們臉上的終點 寫滿了欺騙 編織了永遠也辜負了永遠 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.111.76.71 ※ 編輯: frsnic 來自: 140.111.76.71 (05/10 12:26)

05/10 12:33, , 1F
我之前也是碰到類似這樣的問題 可以也是不知道為什麼=.='
05/10 12:33, 1F

05/10 12:36, , 2F
詭異...
05/10 12:36, 2F

05/10 12:49, , 3F
因為 pow 計算出的值是 double 吧。前者是接者繼續算,最後才
05/10 12:49, 3F

05/10 12:50, , 4F
存入 long long; 後者是先存入 long long, 然後繼續算。猜的!
05/10 12:50, 4F

05/10 13:00, , 5F
參數也要帶double
05/10 13:00, 5F

05/10 13:05, , 6F
需要高精確度的時候不要用double 會AC只是運氣好
05/10 13:05, 6F

05/10 13:11, , 7F
樓上這情況下要用什麼? __int64 ?
05/10 13:11, 7F

05/10 13:13, , 8F
就long long啊..@_@
05/10 13:13, 8F

05/10 13:36, , 9F
但是要算次方 不就要用pow 但是pow就是用double阿...
05/10 13:36, 9F

05/10 13:37, , 10F
還是有其他的方法 難不成要自己算?
05/10 13:37, 10F

05/10 13:38, , 11F
你得到它了
05/10 13:38, 11F

05/10 13:39, , 12F
為了有效利用整數運算器的效能 自己重寫整數次方吧
05/10 13:39, 12F

05/10 14:13, , 13F
整數次方自己寫就好摟..
05/10 14:13, 13F

05/11 01:04, , 14F
原來如此...
05/11 01:04, 14F
文章代碼(AID): #1A1bTABf (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1A1bTABf (C_and_CPP)