原代碼存在邏輯錯誤:
while 循環,混淆了「遍歷數字」與「計算位數和」兩個層次。t 同時作為循環計數器和被計算對象,導致邏輯混亂。t 值而非原始數字。i。i,通過取模(% 10)和整除(/ 10)分解各位數字並累加。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 以內的小範圍,雙層循環完全足夠且可讀性最佳。