看板 C_and_CPP 關於我們 聯絡資訊
就是我用不一樣的括號做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)
AppleFox:我之前也是碰到類似這樣的問題 可以也是不知道為什麼=.=' 05/10 12:33
frsnic:詭異... 05/10 12:36
jtmh:因為 pow 計算出的值是 double 吧。前者是接者繼續算,最後才 05/10 12:49
jtmh:存入 long long; 後者是先存入 long long, 然後繼續算。猜的! 05/10 12:50
TroyLee:參數也要帶double 05/10 13:00
Fenikso:需要高精確度的時候不要用double 會AC只是運氣好 05/10 13:05
chrisdar:樓上這情況下要用什麼? __int64 ? 05/10 13:11
Fenikso:就long long啊..@_@ 05/10 13:13
frsnic:但是要算次方 不就要用pow 但是pow就是用double阿... 05/10 13:36
frsnic:還是有其他的方法 難不成要自己算? 05/10 13:37
chrisdar:你得到它了 05/10 13:38
chrisdar:為了有效利用整數運算器的效能 自己重寫整數次方吧 05/10 13:39
TroyLee:整數次方自己寫就好摟.. 05/10 14:13
frsnic:原來如此... 05/11 01:04