[题目解析]乐乐的回文
乐乐的回文(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;
}
作者:zswagnziye
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!