平平无奇的编程萌新 2021-08-20 20:43 采纳率: 95.2%
浏览 270
已结题

[51nod]3410精妙数

小明正在研究趣味数学。如果一个正整数,它的二进制形式是个回文数,小明就会将它称为“精妙数”。如33,二进制形式为10001,则33是一个精妙数。

现在小明找到了T个数字,他想让你判断这些数是不是精妙数。是精妙数回答“Yes”,否则回答“No”。
输入格式
第一行输入一个数T,表示数字个数; 之后T行,每行输入一个数,表示每个数字。
输出格式
输出T行,每行一个字符串"Yes"或者"No",以空格隔开。
输入样例
3
44
33
22
输出样例
No
Yes
No
数据范围
对于100%的数据,1≤T≤100000,0≤每个数字≤10^9;

以下是我错误的代码(不造哪错了):

#include<iostream>
#pragma GCC optimize(2)
using namespace std;
inline int f(int a)
{
long long num=0,m=a,n[101],i=1;
 while(m)
 {
  n[i]=m%2;
  m/=2;
  i++;
 }
 for(int j=i-1;j>=1;j--)
  num=num*10+n[j];
 return num;
}
inline int r(int n)
{
 int t=n,num=0;
 while(t)
 {
  num=num*10+t%10;
  t/=10;
 }
 return num;
}
int main()
{
 int t,n;
 cin>>t;
 int a[t+1];
 for(int i=1;i<=t;i++)
  cin>>a[i];
 for(int i=1;i<=t;i++)
 {
  n=f(a[i]);
  if(r(n)==n)
   cout<<"Yes\n";
  else
   cout<<"No\n";
 }
 return 0;
}

  • 写回答

4条回答 默认 最新

  • aabyte 2021-08-20 21:51
    关注
    
    #include <iostream>
    using namespace std;
    int f(int x)
    {
        int i=0,a[200]= {0};
        while(x>0) //转二进制 
        {
            a[i]=x%2;
            x=x/2;
            i++;
        }
        for(int j=0; j<i/2+1; j++) //判断是否回文 
        {
            if(a[j]!=a[i-1-j])
                return 0;
        }
        return 1;
    }
    int main()
    {
        int T=0;
        cin>>T;
        int* p=new int[T];
        for(int i=0; i<T; i++)
            cin>>p[i];
        for(int i=0; i<T; i++)
        {
            if(f(p[i])==1)
                cout<<"Yes"<<endl;
            else
                cout<<"No"<<endl;
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 8月29日
  • 已采纳回答 8月21日
  • 创建了问题 8月20日

悬赏问题

  • ¥15 SQL Server下载
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件
  • ¥15 不同系统编译兼容问题
  • ¥100 三相直流充电模块对数字电源芯片在物理上它必须具备哪些功能和性能?
  • ¥30 数字电源对DSP芯片的具体要求