题目描述
回文数是指数字从前往后读和从后往前读都相同的数字。
例如,12321 是一个回文数,77778 不是一个回文数。
当然回文数没有前导 0 和尾数 0,因此 0220 不是一个回文数。
我们观察数字 21,它在十进制表示下不是一个回文数,但是在二进制表示下它却是一个回文数(10101)。
现在请你编写一个程序,读入两个整数 N 和 S,输出满足大于 S 并且至少在两种进制表示下(二进制至十进制)都是回文数的前 N 个整数。
输入样例
3 25
输出样例
26
27
28
稍微改下上题y总的算法
C++ 代码
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
typedef long long LL;
int n,s;
char get( int x ) {
return x + '0';
}
string base(int n, int b) {
string res;
while( n ) {
res += get(n % b);
n /= b;
}
reverse(res.begin(), res.end());
return res;
}
bool check( string s ) {
for ( int i = 0, j = s.size()-1; i < j; i++, j-- ) {
if( s[i] != s[j] ) return false;
}
return true;
}
int main( ) {
cin >> n >> s;
int cnt = 0;
for ( int i = s + 1; cnt < n; i++ ) {
int k = 0;
for ( int j = 2; j <= 10; j++ ) {
string ans = base(i, j);
if( check(ans) ) k++;
}
if( k >= 2 ) {
cnt++;
cout << i << endl;
}
}
return 0;
}