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

Số Armstrong giữa hai số nguyên?

Một số nguyên được gọi là số Armstrong có thứ tự n nếu mỗi chữ số được tách ra và được lập phương và cộng lại thì tổng sẽ giống với số, tức là abcd ... =a 3 + b 3 + c 3 + d 3 + ...

Trong trường hợp một số Amstrong có 3 chữ số thì tổng các lập phương của mỗi chữ số bằng chính số đó. Ví dụ:

153 =1 3 + 5 3 + 3 3 // 153 là một số Armstrong.

Input: Enter two numbers(intervals):999 9999
Output: Armstrong numbers between 999 and 9999 are: 1634 8208 9474

Giải thích

1634 = 13+63+33+43
= 1+216+27+64
= 1634

Cách tiếp cận được thực hiện dưới đây rất đơn giản. Chúng tôi duyệt qua tất cả các số trong phạm vi đã cho. Đối với mọi số, trước tiên chúng ta đếm số chữ số trong đó. Gọi số chữ số trong dãy số hiện tại là n. Chúng ta tìm tổng của các khối lập phương của tất cả các chữ số. Nếu tổng bằng I, chúng tôi in ra số.

Ví dụ

#include <stdio.h>
#include <math.h>
int main() {
   int low = 100;
   int high = 400;
   printf("The amstrong numbers between %d and %d is \n",low,high);
   for (int i = low+1; i < high; ++i) {
      int x = i;
      int n = 0;
      while (x != 0) {
         x /= 10;
         ++n;
      }
      int pow_sum = 0;
      x = i;
      while (x != 0) {
         int digit = x % 10;
         pow_sum += pow(digit, n);
         x /= 10;
      }
      if (pow_sum == i)
         printf("%d ", i);
   }
   printf("\n");
   return 0;
}