for (n = 95860; n < 100000; n++) {
a[0] = n / 10000;
n = n % 10000; // ❌ 修改了循環變量 n,導致外層 for 判斷失效
a[1] = n / 1000;
n = n % 1000; // ❌ 同理
...
}
循環變量 n 在循環體內被反覆取模賦值,導致外層 n++ 基於錯誤基數遞增,邏輯完全亂套。
#include <stdio.h>
void main() {
long n, m;
int a[5] = {0};
for (n = 95860; n < 100000; n++) {
m = n; // 用臨時變量保存原值
for (int i = 4; i >= 0; i--) { // 從低位到高位分解
a[i] = m % 10;
m /= 10;
}
if (a[0] == a[4] && a[1] == a[3]) { // 回文判斷
break;
}
}
printf("%d %d %d %d %d", a[0], a[1], a[2], a[3], a[4]);
}
m % 10 取個位,m /= 10 右移,配合逆序存入數組;a[0] 對應最低位 a[4],次高 a[1] 對應次低 a[3]。9 5 9 5 9 // 95959 是 95860 之後第一個五位回文數
同理,求「下一個質數」、「下一個阿姆斯壯數」等問題,均應保持循環變量純淨,內部邏輯使用獨立臨時變量。