1、从S开始枚举每个十进制数,判断其对应的B进制是否回文数。 /* ID: gengjia1 LANG: C TASK: dualpal */ #include <stdio.h> #include <stdlib.h> //#define NDEBUG #include <assert.h> int N, S; const char *num = "0123456789"; int main(void) { FILE *fin = fopen ("dualpal.in", "r"); FILE *fout = fopen ("dualpal.out", "w"); int pal; int tmp; int B; char b[33]; int count; int i, j, k; fscanf (fin, "%d", &N); assert(N >= 1); assert(N <= 15); fscanf (fin, "%d", &S); assert(S > 0); assert(S < 10000); i = 0; while(i < N) { S += 1; count = 0; for(B = 2; B < 11; B++) { tmp = S; pal = 1; j = 0; while(tmp != 0) { b[j] = num[tmp % B]; tmp = tmp / B; j += 1; } b[j] = '/0'; //判断回文 for(k = 0; k < j / 2; k++) { if(b[k] != b[j-k-1]) { pal = 0; break; } } if(pal == 1) { count += 1; if(count >= 2) { fprintf(fout, "%d/n", S); i += 1; break; } } } } fclose(fin); fclose(fout); exit(0); }