[题目解析]乐乐的回文

乐乐的回文(num)

时间限制: 1000 ms 空间限制: 262144 KB 具体限制

题目描述

乐乐最近喜欢研究回文数,假设一个数从左到右读跟从右到左读的结果是一样的,那么我们说这个数是一个回文数。 如果一个数在十进制下是回文的,我们说这个数是一重回文数,如果一个数在十进制和二进制下是回文的,我们说这个数是二重回文数,如果一个数在三种进制下是回文的,我们说这个数是三重回文数……。现在我们用数字0…9,字母‘A’…‘Z’分别代表数字0…35(即10用A表示,11用B表示……,35用Z表示),任意给出一个10进制数,乐乐想知道它在2至36进制里是多少重的回文数。

输入

只有一个10进制的整数n(2<=n<=2000000000);

输出

第一行为一个整数m,表示n在2至36进制里有m种是回文的;
接下来是m行,从小到大输出n在哪些进制下是回文的。

样例输入

50

输出

3
7
9
24

提示

50对应的7进制数为101,9进制数为55,24进制数为22。

【思路】

首先我们需要先输入N,然后再2~36循环,接着转进制然后判断回文,再按照题目要求输出即可。这道题我非常的后悔,我在考试时就因为手滑把36达成了24,然后就没了五十分…

【代码】

#include<bits/stdc++.h>
using namespace std;
int ans[101];
int as,g;
int main()
{
    int n;
    char s[100];
    int k,m,flag;
    cin>>n;
    for(int i=2;i<=36;i++){
        m=n;k=0;flag=0;
        while(m){
            if(m%i>=0&&m%i<=9)
                s[k++]=m%i+'0';
            else
                s[k++]=m%i-10+'A';
            m=m/i;
        }
        for(int j=0;j<k;j++){
         if(s[j]!=s[--k]){
          flag=1;
   }
  }
        if(flag==0){
         as++;
   ans[++g]=i;
  }
    }
    sort(ans+1,ans+g+1);
    cout<<as<<endl;
    for(int i=1;i<=g;i++){
     cout<<ans[i]<<endl; 
 }
    return 0;
}
posted @ 2022-03-25 20:11  zswangziye  阅读(38)  评论(0编辑  收藏  举报