[题目解析]乐乐的回文

    技术2026-01-26  9

    乐乐的回文(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; }
    Processed: 0.028, SQL: 9