หมายเลขอาร์มสตรองคือตัวเลขที่ผลรวมของหลักที่ยกกำลังของจำนวนหลักทั้งหมดเท่ากับตัวเลขนั้น
ตัวอย่างของตัวเลขอาร์มสตรองมีดังนี้ -
3 = 3^1 153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153 407 = 4^3 + 0^3 + 7^3 = 64 +0 + 343 = 407 1634 = 1^4 + 6^4 + 3^4 + 4^4 = 1 + 1296 + 81 + 256 = 1634
โปรแกรมที่แสดงตัวเลข Armstrong ระหว่างสองช่วงมีดังนี้
ตัวอย่าง
#include <iostream> #include <cmath> using namespace std; int main() { int lowerbound, upperbound, digitSum, temp, remainderNum, digitNum ; lowerbound = 100; upperbound = 500; cout<<"Armstrong Numbers between "<<lowerbound<<" and "<<upperbound<<" are: "; for(int num = lowerbound; num <= upperbound; num++) { temp = num; digitNum = 0; while (temp != 0) { digitNum++; temp = temp/10; } temp = num; digitSum = 0; while (temp != 0) { remainderNum = temp%10; digitSum = digitSum + pow(remainderNum, digitNum); temp = temp/10; } if (num == digitSum) cout<<num<<" "; } return 0; }
ผลลัพธ์
Armstrong Numbers between 100 and 500 are: 153 370 371 407
ในโปรแกรมข้างต้น จะพบตัวเลขอาร์มสตรองระหว่างช่วงเวลาที่กำหนด ทำได้โดยใช้หลายขั้นตอน ขอบล่างและขอบบนของช่วงกำหนด เมื่อใช้สิ่งเหล่านี้ a for loop จะเริ่มต้นจากล่างขึ้นบนและแต่ละหมายเลขจะได้รับการประเมินเพื่อดูว่าเป็นหมายเลข Armstrong หรือไม่
ซึ่งสามารถเห็นได้ในข้อมูลโค้ดต่อไปนี้
lowerbound = 100; upperbound = 500; cout<<"Armstrong Numbers between "<<lowerbound<<" and "<<upperbound<<" are: "; for(int num = lowerbound; num <= upperbound; num++)
ใน for loop ให้หาจำนวนหลักในตัวเลขเช่น num ก่อน ทำได้โดยการเพิ่มหนึ่งไปยัง digitNum สำหรับแต่ละหลัก
สิ่งนี้แสดงให้เห็นโดยข้อมูลโค้ดต่อไปนี้
temp = num; digitNum = 0; while (temp != 0) { digitNum++; temp = temp/10; }
หลังจากที่ทราบจำนวนหลักแล้ว digitSum จะถูกคำนวณโดยการบวกแต่ละหลักยกกำลังของ digitNum เช่น จำนวนหลัก
ซึ่งสามารถเห็นได้ในข้อมูลโค้ดต่อไปนี้
temp = num; digitSum = 0; while (temp != 0) { remainderNum = temp%10; digitSum = digitSum + pow(remainderNum, digitNum); temp = temp/10; }
หากตัวเลขเท่ากับ digitSum แสดงว่าตัวเลขนั้นเป็นหมายเลข Armstrong และพิมพ์ออกมา ถ้าไม่อย่างนั้นก็ไม่ใช่หมายเลขอาร์มสตรอง ซึ่งเห็นได้ในตัวอย่างโค้ดด้านล่าง
if (num == digitSum) cout<<num<<" ";