首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言循環中修改循環變量導致邏輯錯誤:正確分離數字各位的姿勢

     編輯:程式設計疑難解答

錯誤代碼分析

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]);
}

關鍵點總結

  • 永不在循環體內修改循環控制變量(for/while 的計數器);
  • 提取數字各位:m % 10 取個位,m /= 10 右移,配合逆序存入數組;
  • 回文判斷:最高位 a[0] 對應最低位 a[4],次高 a[1] 對應次低 a[3]。

運行結果

9 5 9 5 9   // 95959 是 95860 之後第一個五位回文數

舉一反三

同理,求「下一個質數」、「下一個阿姆斯壯數」等問題,均應保持循環變量純淨,內部邏輯使用獨立臨時變量。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved