2680 - 双重回文数

如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”。例如,12321就是一个回文数,而77778就不是。当然,回文数的首和尾都应是非零的,因此0220就不是回文数。
事实上,有一些数(如21),在十进制时不是回文数,但在其它进制(如二进制时为10101)时就是回文数。
编一个程序,从文件读入两个十进制数
• N (1 <= N <= 15)
• S (0 < S < 10000)
然后找出前N个满足大于S且在两种以上进制(二进制至十进制)上是回文数的十进制数,输出到文件上。

题目输入

只有一行,用空格隔开的两个数N和S。

题目输出

N行, 每行一个满足上述要求的数,并按从小到大的顺序输出。

输入/输出样例

题目输入

3 25

题目输出

26
27
28

C++解答

#include<iostream>
using namespace std;
int a[5005]={};
bool huiwen(int x[],int len);
bool jinzhi(int x[],int v,int j);
int main() {
    int i,j,k,l=0,n,s;
    cin>>n>>s;
    i=s+1;
    while(true) {
		if(l==n) break;
		k=0;
        for(j=2;j<=10;j++){
            if(jinzhi(a,i,j)) {
                k++;
            }
            if(k>=2) {
                break;
            }
        }
        if(k>=2) {
            cout<<i<<endl;
            l++;
        }
        i++;
	}
    return 0;
}
bool jinzhi(int x[],int v,int j){
    int len=0;
    while(v!=0){
        x[len]=v%j;
        v=v/j;
        len++;
    }
    return huiwen(x,len);
}
bool huiwen(int x[],int len) {
    int i;
    for(i=0;i<len/2;i++){
        if(x[i]!=x[len-1-i])
            return false;
    }
    return true;
}
时间限制 1 秒
内存限制 128 MB
讨论 统计
上一题 下一题