最为朴素的想法是枚举,对于每一个数。拆分每一个数位,存储到数组中保存。在利用一个循环判断,前半部分数位对应的数位是不是相同的。
#include <iostream>
int n, i, j, k, num;
char digits[10];
int main() {
std::cin >> n;
for (i = 1; i <= n; i++) {
num = i; k = 0;
do {
digits[++k] = num%10;
} while ((num /= 10) > 0);
for (j = 1; j <= k/2; j++)
if (digits[j] != digits[k+1-j]) break;
if (j > k/2) std::cout << i << std::endl;
}
return 0;
}
看了看别人的题解,都忘了还有一个更直接的写法。想来自己对回文数的判断太纠结于数位。
#include <iostream>
int n, num1, num2;
int main() {
std::cin >> n;
for (i = 1; i <= n; i++) {
num1 = i; num2 = 0;
do {
num2 = num2 * 10 + num1 % 10;
} while ((num1 /= 10) > 0);
if (num2 == i) std::cout << i << std::endl;
}
return 0;
}