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 |
|---|---|
| 1 | 0-9 (tất cả) |
| 3 | 153, 370, 371, 407 |
| 4 | 1634, 8208, 9474 |
| 5 | 54748, 92727, 93084 |
| 6 | 548834 |
Lưu ý
- Code gốc chỉ đúng cho số 3 chữ số (dùng
digit*digit*digitcứng). - Phiên bản tổng quát dùng
Math.Powvà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ố).