回文數對稱,由前半部分決定。按位數長度分類生成:
// 1 位數
for (int i = 1; i < 10; i++) output(i);
// 2 位數
for (int i = 1; i < 10; i++) output(i * 10 + i);
// 3 位數
for (int i = 10; i < 100; i++) output(i * 100 + reverse(i / 10));
// 4 位數
for (int i = 10; i < 100; i++) output(i * 100 + reverse(i));
// 5 位數
for (int i = 100; i < 1000; i++) output(i * 100 + reverse(i / 10));
// 6 位數
for (int i = 100; i < 1000; i++) output(i * 1000 + reverse(i));
// ... 以此類推
int reverse(int x) {
int r = 0;
while (x > 0) { r = r * 10 + x % 10; x /= 10; }
return r;
}
掌握回文數構造模式,解決相關數論問題得心應手。