Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ เพื่อแสดงหมายเลข Armstrong ระหว่างสองช่วงเวลา


หมายเลขอาร์มสตรองคือตัวเลขที่ผลรวมของหลักที่ยกกำลังของจำนวนหลักทั้งหมดเท่ากับตัวเลขนั้น

ตัวอย่างของตัวเลขอาร์มสตรองมีดังนี้ -

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<<" ";