/ Vijos / 讨论 / 问答 /

怎么会有三个WRONG ANSWER??蒟蒻妹子求教

#include<cmath>
#include<algorithm>
#include<iostream>
using namespace std;
int n,sum=0,m=32;
int a[35]={0};
int main()
{
cin>>n;
while(n>0)
{
if(n<=0)break;
if(n%2==1)
{
a[m]=1;m--;n=(n-1)/2;
}
else
{
m--;n=n/2;
}
}
int c[35]={0};
for(int i=1;i<=16;i++)
{ c[i]=a[i+16];}
for(int i=17;i<=32;i++)
{c[i]=a[i-16];}
for(int i=32;i>0;i--)
{
sum+=c[i]*pow(2,32-i);//乘方函数
}
cout<<sum;
return 0;

}

4 条评论

  • @ 2016-11-17 21:01:43

    妹子~

  • @ 2016-11-17 19:27:39

    已经AC了O O
    我把您的 int 变量改成了 long long !另外,在 pow() 函数中*很不负责任地*做了一个类型转换。

         double pow (double base     , double exponent);
          float pow (float base      , float exponent);
    long double pow (long double base, long double exponent);
         double pow (Type1 base      , Type2 exponent);        // additional overloads
    //http://www.cplusplus.com/reference/cmath/pow/?kw=pow
    

    另外 还添加了我的代码风格 感觉好看了不少!

    #include<cmath>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    typedef long long ll;
    ll n, sum = 0, m = 32;
    ll a[35] = {0};
    
    int main()
    {
        cin>>n;
        while(n > 0)
        {
            if(n <= 0)break;
            if(n % 2 == 1)
            {
                a[m] = 1;
                m--;
                n = (n - 1) / 2;
            }
            else
            {
                m--;
                n = n / 2;
            }
        }
        int c[35] = {0};
        for(int i = 1; i <= 16; i++)
            c[i] = a[i + 16];
        for(int i = 17; i <= 32; i++)
            c[i] = a[i - 16];
        for(int i = 32; i > 0; i--)
            sum += c[i] * pow(2.0,32-i + 0.0);//乘方函数
        cout<<sum;
        return 0;
    }
    
  • @ 2016-11-17 18:54:57

    大**妹子?#滑稽

  • @ 2016-11-17 18:51:05

    但是 这是哪一道题呢0 0?

  • 1