题目大意:
给出2个十进制数N和S,求N个大于S的双重回文数, 双重回文数为在二到十进制下满足至少2种进制转换后能够形成回文数的数。
1 <= N <= 15 0 < S < 10000
题解:
从s+1开始去向后枚举 对于每个数进行10次进制转换然后判断是否回文,进制转换可以用依次取模后将所得结果取反,而这题因为取不取反都不影响所以我没去弄,不过转换后注意前导0的问题,以及要满足2种及以上。
代码:
#include<bits/stdc++.h>
using namespace std;
int f[
105],rp,n,s;
int check(
int k,
int x)
{
f[
0]=
0;
while (x)
{
f[++f[
0]]=x%k;
x=x/k;
}
int l=
1,r=f[
0];
while (f[r]==
0 && r!=
1) r--;
while (l<r)
{
if (f[l]!=f[r])
return 0;
l++; r--;
}
return 1;
}
int main()
{
scanf(
"%d%d",&n,&s);
while (n!=
0)
{
s++;
rp=
0;
for (
int k=
2; k<=
10; k++)
if (check(k,s)) rp++;
if (rp>=
2)
{
printf(
"%d\n",s);
n--;
}
}
return 0;
}