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

Java 實現 10 到 1000 間各位數字和為 5 的數字查找

     編輯:程式設計疑難解答

問題代碼分析

原代碼存在邏輯錯誤:

  • 僅使用單層 while 循環,混淆了「遍歷數字」與「計算位數和」兩個層次。
  • 變量 t 同時作為循環計數器和被計算對象,導致邏輯混亂。
  • 輸出使用最終的 t 值而非原始數字。

正確算法思路

  1. 外層循環:遍歷 10 到 999 的每個整數 i。
  2. 內層循環:對每個 i,通過取模(% 10)和整除(/ 10)分解各位數字並累加。
  3. 判斷輸出:若位數和等於 5,輸出原始數字 i。

修正後完整代碼

public class Demo1 {
    public static void main(String[] args) {
        // 外層循環:遍歷 10 到 999
        for (int i = 10; i < 1000; i++) {
            int sum = 0;
            int t = i;  // 保存原始數字用於計算
            
            // 內層循環:計算各位數字和
            while (t > 0) {
                sum += t % 10;  // 取個位數字
                t /= 10;        // 去掉個位
            }
            
            // 判斷並輸出
            if (sum == 5) {
                System.out.println("各個數位之和為 5 的有:" + i);
            }
        }
    }
}

執行結果示例

各個數位之和為 5 的有:14
各個數位之和為 5 的有:23
各個數位之和為 5 的有:32
各個數位之和為 5 的有:41
各個數位之和為 5 的有:50
各個數位之和為 5 的有:104
各個數位之和為 5 的有:113
...(共 30 個符合條件的數字)

關鍵點總結

  • 雙層循環分離關注點:外層遍歷候選數,內層計算屬性。
  • 保護原始數據:使用臨時變量 t 參與計算,保留 i 用於輸出。
  • 循環終止條件:t > 0 確保處理完所有位數(含個位為 0 的情況)。
  • 擴展性:若需查找其他範圍或目標和,只需修改循環邊界與判斷值。

進階優化(可選)

對於極大範圍(如 1 到 10^9),可採用數位 DP或遞歸生成避免逐個檢查,但對於 1000 以內的小範圍,雙層循環完全足夠且可讀性最佳。

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