Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình C ++ để hiển thị số Armstrong giữa hai khoảng thời gian

Số Armstrong là một số mà tổng các chữ số được nâng lên thành lũy thừa của tổng các chữ số bằng một số.

Một số ví dụ về số Armstrong như sau -

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

Một chương trình hiển thị số Armstrong giữa hai khoảng thời gian như sau.

Ví dụ

#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;
}

Đầu ra

Armstrong Numbers between 100 and 500 are: 153 370 371 407

Trong chương trình trên, số Armstrong giữa các khoảng đã cho được tìm thấy. Điều này được thực hiện bằng nhiều bước. Giới hạn dưới và giới hạn trên của khoảng được đưa ra. Bằng cách sử dụng những điều này, một vòng lặp for được bắt đầu từ giá trị thấp hơn đến hướng trên và mỗi số được đánh giá để xem đó có phải là số Armstrong hay không.

Điều này có thể được nhìn thấy trong đoạn mã sau.

lowerbound = 100;
upperbound = 500;
cout<<"Armstrong Numbers between "<<lowerbound<<" and "<<upperbound<<" are: ";
for(int num = lowerbound; num <= upperbound; num++)

Trong vòng lặp for, đầu tiên tìm thấy số chữ số trong số, tức là số trong num. Điều này được thực hiện bằng cách thêm một vào chữ sốNum cho mỗi chữ số.

Điều này được chứng minh bằng đoạn mã sau.

temp = num;
digitNum = 0;
while (temp != 0) {
   digitNum++;
   temp = temp/10;
}

Sau khi đã biết số chữ số, thì digitSum được tính bằng cách cộng từng chữ số được nâng lên thành lũy thừa của digitNum, tức là số chữ số.

Bạn có thể thấy điều này trong đoạn mã sau.

temp = num;
digitSum = 0;
while (temp != 0) {
   remainderNum = temp%10;
   digitSum = digitSum + pow(remainderNum, digitNum);
   temp = temp/10;
}

Nếu số bằng chữ sốSum, thì số đó là số Amstrong và nó được in ra. Nếu không, thì nó không phải là số Armstrong. Điều này được thấy trong đoạn mã bên dưới.

if (num == digitSum)
cout<<num<<" ";