题目大意
读入两个十进制数N (1 <= N <= 15)S (0 < S < 10000),找出前N个满足大于S且在两种或两种以上进制(二进制至十进制)上是回文数的十进制数
输入格式
line 1:N S
输出格式
line 1-N:每行一个满足条件的数,按从小到大排序
样例输入
3 25
样例输出
26
27
28
题解
从S开始往后依次遍历,并将数依次用2-10进制表示,判断是否出现两次回文数,是则输出并count位加一。count到N时结束程序。
代码
#include<stdio.h>
#include<string.h>
int huiwen(char str[200],int len)
{
int i;
for(i=0;i<len;i++)
{
if(str[i]!=str[len-1-i])
return 0;
}
return 1;
}
int base(long int n,int m,char *str)
{
char str1[200];
int i=0,j=0;
while(n)
{
if(n%m<10)
str1[i]=n%m+'0';
else
str1[i]=n%m-10+'A';
n=n/m;
i++;
}
i--;
for(j=0;j<=i;j++)
{
str[j]=str1[i-j];
}
return i+1;
}
int main()
{
long int i;
int N,S,countb=0,countn=0,b,len;
char str[200];
scanf("%d %d",&N,&S);
i=S+1;
while(countn<N)
{
countb=0;
for(b=2;b<=10;b++)
{
len=base(i,b,str);
if(huiwen(str,len))
{
countb++;
}
if(countb>=2)
{
break;
}
}
if(countb>=2)
{
countn++;
printf("%ld\n",i);
}
i++;
}
return 0;
}