首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

阿姆斯壯數判斷:三位數版本完整解析

     編輯:關於C

什麼是阿姆斯壯數?

阿姆斯壯數又稱自戀數,指一個 n 位數,其各位數字的 n 次方之和等於該數本身。對於三位數 abc,滿足條件:a³ + b³ + c³ = abc。

題目需求

輸入一個三位整數,判斷是否為阿姆斯壯數。若輸入非三位數,提示錯誤。

演算法步驟

  1. 讀入整數 num
  2. 檢查範圍:100 ≤ num ≤ 999
  3. 分解百位、十位、個位:
    • 百位:c = num / 100
    • 十位:b = (num / 10) % 10
    • 個位:a = num % 10
  4. 計算 a³ + b³ + c³ 與 num 比較
  5. 輸出判斷結果

C 語言完整實作

#include <stdio.h>

int main() {
    int num, a, b, c;
    
    printf("請輸入一個三位數: ");
    scanf("%d", &num);
    
    if (num < 100 || num > 999) {
        printf("%d 不是三位數,輸入有誤!\n", num);
    } else {
        a = num % 10;        // 個位
        b = num / 10 % 10;   // 十位
        c = num / 100;       // 百位
        
        if (a*a*a + b*b*b + c*c*c == num) {
            printf("%d is Armstrong.\n", num);
        } else {
            printf("%d is not Armstrong!\n", num);
        }
    }
    return 0;
}

執行範例

輸入: 153
輸出: 153 is Armstrong.
驗證:1³ + 5³ + 3³ = 1 + 125 + 27 = 153 ✓

輸入: 123
輸出: 123 is not Armstrong!
驗證:1³ + 2³ + 3³ = 1 + 8 + 27 = 36 ≠ 123

輸入: 99
輸出: 99 不是三位數,輸入有誤!

三位數阿姆斯壯數完整列表

只有四個三位數符合條件:

  • 153 = 1³ + 5³ + 3³
  • 370 = 3³ + 7³ + 0³
  • 371 = 3³ + 7³ + 1³
  • 407 = 4³ + 0³ + 7³

常見錯誤與注意事項

  • 忘記驗證輸入範圍,導致非三位數也參與運算
  • 位數分解邏輯錯誤(特別是十位的取法)
  • 使用次方運算子 ^ 而非乘法(C 語言中 ^ 是位元 XOR)
  • 輸出格式不符合題目要求(大小寫、標點)

延伸思考

若要找出所有 n 位數的阿姆斯壯數,可參考下一篇文章(問題七十八)的遍歷法。通用解法需動態計算位數 n,並對每位進行 n 次方運算。

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