作者bleed1979 (十三)
看板C_and_CPP
标题Re: [问题] pow奇怪的情况...
时间Sun May 10 14:44:42 2009
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
1F:推 frsnic:照样可以0ms 是机器的问题吗? 还是真的效率有比较好? 05/11 01:09
2F:→ frsnic:而且pow做完为什麽要+0.5阿? 05/11 01:10