เลขอาร์มสตรอง (Armstrong Numbers) คืออะไร?
เลขอาร์มสตรอง (หรือ Narcissistic Number) คือเลขที่ผลรวมของเลขยกกำลังจำนวนหลักเท่ากับตัวเลขนั้นเอง
สำหรับเลข 3 หลัก: abc = a³ + b³ + c³ เช่น 153 = 1³ + 5³ + 3³ = 1 + 125 + 27 = 153 ✓
ตัวอย่างโค้ด: หาเลขอาร์มสตรอง 1-1000
using System;
class Program
{
static void Main()
{
Console.WriteLine("เลขอาร์มสตรองระหว่าง 1 ถึง 1000:");
for (int num = 1; num <= 1000; num++)
{
int original = num;
int sum = 0;
int digits = num.ToString().Length; // จำนวนหลัก
// คำนวณผลรวมของแต่ละหลักยกกำลัง digits
int temp = num;
while (temp > 0)
{
int digit = temp % 10;
sum += (int)Math.Pow(digit, digits);
temp /= 10;
}
if (sum == original)
{
Console.WriteLine($"{original} (หลัก={digits})");
}
}
}
}
ผลลัพธ์
เลขอาร์มสตรองระหว่าง 1 ถึง 1000:
1 (หลัก=1)
2 (หลัก=1)
3 (หลัก=1)
4 (หลัก=1)
5 (หลัก=1)
6 (หลัก=1)
7 (หลัก=1)
8 (หลัก=1)
9 (หลัก=1)
153 (หลัก=3)
370 (หลัก=3)
371 (หลัก=3)
407 (หลัก=3)
คำอธิบายอัลกอริทึม
- วนลูปตัวเลข 1 ถึง 1000
- หาจำนวนหลักด้วย
ToString().Lengthหรือคณิตศาสตร์ - แยกแต่ละหลักด้วย modulo 10 (
% 10) และหาร 10 (/ 10) - ยกกำลังแต่ละหลักด้วย
Math.Pow(digit, digits) - รวมผลลัพธ์ เปรียบเทียบกับตัวเลขเดิม
เลขอาร์มสตรองที่รู้จัก (ฐาน 10)
| จำนวนหลัก | ตัวอย่าง |
|---|---|
| 1 | 0-9 (ทั้งหมด) |
| 3 | 153, 370, 371, 407 |
| 4 | 1634, 8208, 9474 |
| 5 | 54748, 92727, 93084 |
| 6 | 548834 |
การเพิ่มประสิทธิภาพ
คำนวณกำลังก่อนเก็บในอาร์เรย์ int[] powers = new int[10]; for(int i=0;i<10;i++) powers[i] = (int)Math.Pow(i, digits); แล้วใช้ powers[digit] แทน Math.Pow ในลูป