Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Chương trình C# kiểm tra số Armstrong (Số Armstrong)

Số Armstrong (còn gọi là số narcissistic) là số mà tổng các chữ số lũy thừa theo số chữ số bằng chính nó. Với số 3 chữ số: abc = a³ + b³ + c³. Ví dụ: 153 = 1³ + 5³ + 3³ = 1 + 125 + 27 = 153.

Mã nguồn (chỉ dành cho số 3 chữ số)

using System;

namespace Demo {
    class ApplicationNew {
        static void Main(string[] args) {
            int val = 153;
            int sum = 0;
            int original = val;
            
            while (val > 0) {
                int digit = val % 10;
                sum += digit * digit * digit; // Lập phương
                val /= 10;
            }
            
            if (sum == original) {
                Console.WriteLine("{0} là số Armstrong", original);
            } else {
                Console.WriteLine("{0} KHÔNG phải số Armstrong", original);
            }
            Console.ReadLine();
        }
    }
}

Kết quả

153 là số Armstrong

Phiên bản tổng quát (bất kỳ số chữ số nào)


static bool IsArmstrong(int n) {
    if (n < 0) return false;
    if (n == 0) return true;
    
    int original = n;
    int digits = (int)Math.Log10(n) + 1; // Số chữ số
    int sum = 0;
    
    while (n > 0) {
        int d = n % 10;
        sum += (int)Math.Pow(d, digits);
        n /= 10;
    }
    return sum == original;
}

// Test
for (int i = 0; i < 10000; i++) {
    if (IsArmstrong(i)) Console.WriteLine(i);
}
// Kết quả: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474...

Các số Armstrong nhỏ (cơ số 10)

Số chữ sốSố Armstrong
10-9 (tất cả)
3153, 370, 371, 407
41634, 8208, 9474
554748, 92727, 93084
6548834

Lưu ý

  • Code gốc chỉ đúng cho số 3 chữ số (dùng digit*digit*digit cứng).
  • Phiên bản tổng quát dùng Math.Pow và Math.Log10 — chậm hơn do float. Tối ưu: pre-compute lũy thừa 0-9 cho mỗi số chữ số.
  • Số Armstrong rất hiếm — chỉ có 88 số trong cơ số 10 (lớn nhất 39 chữ số).