题目描述
如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”。例如,12321 就是一个回文数,而 77778 就不是。当然,回文数的首和尾都应是非零的,因此 0220 就不是回文数。事实上,有一些数(如 33 ),在十进制时是回文数,在二进制时( 100001 )时也是回文数,我们姑且将这样的数叫做双重回文数,请你找出两个整数之间的所有双重回文数,如果没有,输出-1
输入格式
1 行,共两个整数,使用空格隔开。(第一个整数不大于第二个整数)
输出格式
2个整数范围内满足条件的双重回文数,并进行换行显示
如果没有,输出-1
输入输出样例
输入#1
10 1000
输出#1
33
99
313
585
717
#include<bits/stdc++.h>
using namespace std;
int j,k,cnt;
string s;
void change(int x,int n)
{
while(x)
{
if(x%n>=0&&x%n<=9)
s+=(x%n+'0');
else
s+=(x%n+'A'-10);
x/=n;
}
}
int main()
{
cin>>j>>k;
for(int v=k+1;;v++)
{
int cntt=0;
for(int i=2;i<=10;i++)
{
s.clear();
change(v,i);
string k(s.begin(),s.end());
reverse(s.begin(),s.end());
if(s==k)
{
cntt++;
//cout<<cntt;
if(cntt==2)
{
cout<<v<<endl;
cnt++;
break;
}
}
}
if(cnt==j)break;
}
return 0;
}
这个我看到过,但我这道和那个不太一样