最为朴素的想法是枚举,对于每一个数。拆分每一个数位,存储到数组中保存。在利用一个循环判断,前半部分数位对应的数位是不是相同的。

#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;
}