Re: [問題] pow奇怪的情況...
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
推
05/11 01:09, , 1F
05/11 01:09, 1F
→
05/11 01:10, , 2F
05/11 01:10, 2F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章