看板 C_and_CPP 關於我們 聯絡資訊
2ms的做法是根本不需要pow 用陣列儲存再減 不過既然有找到公式 我改給你 0ms #include<stdio.h> #include<math.h> int main(void) { unsigned long long int n; int k; while(scanf("%d" , &k) != EOF) { n = ( ( ( unsigned long long )(pow(2, (k + 1)) + 0.5 ) - 1) ) * 2; if(k >= 10) { n = n - (( ( ( unsigned long long ) (pow(2, (k - 9)) + 0.5 ) ) - 1) * 2); } printf("%llu\n" , n); } return 0; } Bleed ※ 引述《frsnic (路人)》之銘言: : 就是我用不一樣的括號做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; : } -- World of bleed1979 http://bleed1979.myweb.hinet.net/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.135.155
frsnic:照樣可以0ms 是機器的問題嗎? 還是真的效率有比較好? 05/11 01:09
frsnic:而且pow做完為什麼要+0.5阿? 05/11 01:10