题目:NHOI2010第二题 乐乐的数字
题目描述:
乐乐最近喜欢研究回文数,假设一个数从左到右读跟从右到左读的结果是一样的,那么我们说这个数是一个回文数。 如果一个数在十进制下是回文的,我们说这个数是一重回文数,如果一个数在十进制和二进制下是回文的,我们说这个数是二重回文数,如果一个数在三种进制下是回文的,我们说这个数是三重回文数……。现在我们用数字0..9,字母‘A’..‘Z’分别代表数字10..35(即10用A表示,11用B表示……,35用Z表示),任意给出一个10进制数,乐乐想知道它在2至36进制里是多少重的回文数。
输入 输入文件只有一个10进制的整数n(2<=n<=2000000000)
输出 第一行为一个整数m,表示n在2至36进制里有m种是回文的;
接下来是m行,从小到大输出n在哪些进制下是回文的。
样例输入
50
样例输出
3
7
9
24
提示 50对应的7进制数为101,9进制数为55,24进制数为22。
#include <bits/stdc++.h>
using namespace std;
int a;
char num[100];
int i;
int main() {
cin >> a;
for (int j = 2; j <= 36; j++) {
_itoa(a, num, j); //c++中一般用_itoa,用itoa也行,
int len = strlen(num);
for (i = 0; i < len / 2; i++) { //第一位和最后一位比较,依次递增,递减比较
if (num[i] != num[len - 1 - i])
break;
}
if (i < len / 2)
cout << j << endl;
}
return 0;
}
然而我的输出:
2 3 4 5 6 8 10 11 12 13 14 15 16 17 18 19 20 21 22 23 25 26 27 28 29 30 31 32 33 34 35 36 哪里错了???