此题可以利用1.2.4中所写的进制转换函数,题目本身没有太大难度,模拟即可。
代码如下:
/*
ID: michael139
LANG: C
PROG: dualpal
*/
#include<stdio.h>
#include<string.h>
int tenToB(int ten,char B[150],int b);
int main () {
FILE *fin = fopen("dualpal.in", "r");
FILE *fout = fopen("dualpal.out", "w");
int n,s,i,j,k,len,ok,count;
char B[150];
while (fscanf(fin,"%d%d",&n,&s) != EOF) {
for (i=s+1; ;i++) {
if (n==0) break;
count = 0;
for (j=2;j<=10;j++) {
len = tenToB(i,B,j);
ok = 1;
for (k=0;k<len/2;k++) {
if (B[k]!=B[len-k-1]) {
ok = 0;
break;
}
}
if (ok) count++;
}
if (count>=2) {
n--;
fprintf(fout,"%d\n",i);
}
}
}
return 0;
}
int tenToB(int ten,char B[150],int b) {
int i,len = 0,bit;
char TB[150];
while (ten!=0) {
bit = ten % b;
if (bit<=9) {
TB[len++] = bit+'0';
} else {
TB[len++] = bit-10+'A';
}
ten /= b;
}
for (i=len-1;i>=0;i--) B[len-i-1] = TB[i];
B[len] = '\0';
return len;
}