如果一个正整数n至少在两个不同的进制b1和b2下都是回文数(2<=b1,b2<=10),则称n是双基回文数(注意,回文数不能包含前导0)输入正整数S<10^6,输出比S大的最小双基回文数。
样列输入:1600000
样列输出:1632995
#include<cstdio>
#include<cstring>
#include<cstdlib> //atoi itoa 在cstdlib头文件中
#include<cmath>
using namespace std;
bool symm(char a[]);
int main() {
char num[100];
while (cin >> num) {
while (1) {
long temp = atoi(num) + 1; //加1后存进num
itoa(temp, num, 10); //num都以十进制形式存储
int count = 0; //计数器,判断此时的num是否有超过两个以上的在不同进制下的回文数
for (int i = 2; i <= 10; ++i) {
long data = atoi(num);
char num_temp[100];
itoa(data, num_temp, i);
if (symm(num_temp)) {
++count;
}
if (count == 2)
break;
}
if (count == 2) {
cout << "最小双基回文数:" << num << endl;
break;
}
}
}
return 0;
}
bool symm(char a[]) {
double data1 = 0;
double data2 = 0;
int len = strlen(a);
for (int i = len - 1; i >= 0; --i) {
data1 += (a[i] - '0') * pow(10.0, len - 1 - i);
}
for (int i = 0; i < len; ++i) {
data2 += (a[i] - '0') * pow(10.0, i);
}
return (data1 == data2);
}