回文回文数 HUST - 1694
Problem
如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做 “回文数”。事实上,有一些数(如 21),在十进制时不是回文数,但在其它进制(如二进制时为 10101)时就是回文数。现在,你需要找出来,前 N 个满足大于 S 且在两种或两种以上进制(二进制至十进制)上是回文数的十进制数。
Input
有多组数据第一行是数据组数 T(T ≤10) 对于每组数据,包含两个数
N(N≤15),S(0
Output
对于每一个输入,先输出一个”Case #x:”,之后输出 N 行,每行一个回文回文数数字。
Sample Input
1
3 25
Sample Output
Case #1:
26
27
28
ps:初始化数组也是需要很长时间的
代码如下:
#include<iostream>
#include<cstdio>
#include<string.h>
#include<algorithm>
using namespace std;
int a[100];
int chark(int x, int index) {
int l = 0;
while( x ) {
a[l] = x % index;
x /= index;
l++;
}
// for(int i = 0; i < l; i++)
// printf("%d ", a[i]);
// printf("\n");
int flag = 1;
int i, j;
for(i = 0,j = l-1; i < j; i++, j--) {
if(a[i] != a[j]) {
flag = 0;
break;
}
}
if(flag) return 1;
else return 0;
}
int main () {
int t;
int k = 1;
scanf("%d", &t);
while( t-- ) {
int n , s;
scanf("%d %d", &n, &s);
int num = 1;
printf("Case #%d:\n", k++);
for(int x = s+1; num <= n; x++) {
int sum = 0;
for(int index = 2; index <=10 ; index++) {
sum += chark(x, index);
// printf("x == %d\nindex == %d\n", x, index);
if(sum >= 2) break;
}
if(sum >= 2) {
printf("%d\n", x);
num++;
}
}
}
return 0;
}