题目:略
题目要求找到大于s且在至少两种进制上是回文数的n个十进制数,使用枚举的方法来解决:
从s+1开始枚举一个十进制数,将它转换为j进制数,检查转换后的j进制数是否为回文数,若找到在两种进制下是回文数,则输出这个数,重复此过程,直到找到n个数。
转换为j进制数代码如下:
void jinzhi(int x,int y){
cnt=0;
while(x>0){
a[++cnt]=x%y;
x=x/y;
}
}
判断是否为回文数代码如下:
bool check(){
int i=1;
int j=cnt;
while(i<j) if(a[i]!=a[j]) return 0;
else{
i++;
j--;
}
return 1;
}
完整代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[30];
int cnt;
void jinzhi(int x,int y){
cnt=0;
while(x>0){
a[++cnt]=x%y;
x=x/y;
}
}
bool check(){
int i=1;
int j=cnt;
while(i<j) if(a[i]!=a[j]) return 0;
else{
i++;
j--;
}
return 1;
}
int main(){
int n,s;
scanf("%d %d",&n,&s);
while(n>0){
s++;
int num=0;
for(int j=2;j<=10;j++){
jinzhi(s,j);
if(check()) num++;
if(num==2){
cout<<s<<endl;
n--;
break;
}
}
}
return 0;
}