2 条题解

  • 1
    @ 2025-11-18 13:49:33
    #include<iostream>
    using namespace std;
    int main()
    {
        ios::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
        int t;
        int n;
        cin>>t;
        while(t--)
        {
            int j=0;
            cin>>n;
            //特判0
            if(n==0)
            {
                cout<<"YES"<<'\n';
                continue;
            }
            char c[96]={'0'};
            //存储二进制
            while(n)
            {
                int i=n%2;
                c[j++]='0'+i;
                n/=2;
            }
            int cnt=0;
            int fa=0;
            //找出c中前导0的个数
           //如8 1000,存储在c中为0001
          //我们要在c的后面加3个0
            for(int k=0;k<j;k++)
            {
                if(c[k]=='0'&&fa==0)
                {
                    cnt++;
                }
                if(c[k]!='0')
                {
                    fa=1;
                }
            }
            //加0
            while(cnt--)
            {
                c[j++]='0';
            }
            //一共奇数位的话中间必须为0
            if(j%2==1)
            {
                if(c[j/2]=='1')
                {
                    cout<<"NO"<<'\n';
                    continue;
                }
            }
            //判断是否回文
            fa=1;
            for(int i=0;i<=j/2;i++)
            {
                if(c[i]!=c[j-1-i])
                {
                    fa=0;
                    break;
                }
            }
            if(fa)
            cout<<"YES"<<'\n';
            else
            cout<<"NO"<<'\n';
        }
        return 0;
    }
    
    
    

    信息

    ID
    1197
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    24
    已通过
    4
    上传者