和上一题差不多的思路,就是多考虑下前
/*
ID: ljracm1
LANG: C++
PROG: dualpal
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#define T
using namespace std;
bool ispal(char *s){
bool flag=true;//前导零标记
for(char *t = s+strlen(s)-1; s<t; s++,t--){
if(*s!=*t)
return false;
else{
if(flag&&*s=='0')
return false;
else
flag = false;
}
}
return true;
}
void numbconv(char *s, int n,int b){//递归写修改进制的方法感觉这段代码挺赞~!
int len;
if(n==0){
strcpy(s,"");
return ;
}
numbconv(s,n/b,b);
len = strlen(s);
s[len] ="0123456789"[n%b];
s[len+1]='\0';
}
bool judge(int num,int base){
char s[40];
numbconv(s,num,base);
if(ispal(s)){
return true;
}
return false;
}
int main(){
#ifdef T
freopen("dualpal.in","r",stdin);
freopen("dualpal.out","w",stdout);
#endif
int n,s;
cin>>n>>s;
for(int cnt=0,i=s+1; cnt<n; i++){
bool flag = false;
for(int base=2,t=0; base<=10; base++){
if(judge(i,base)){
t++;
}
if(t==2){
flag = true;
break;
}
}
if(flag){ cout<<i<<endl; cnt++; }
}
return 0;
}