Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

암스트롱 두 정수 사이의 숫자?

<시간/>

정수를 n차의 암스트롱 수라고 합니다. 모든 자릿수가 분리되고 세제곱되고 합산된 경우 합계는 숫자, 즉 abcd... =a 3 과 같습니다. + b 3 + c 3 + d 3 + ...

Armstrong 숫자가 3자리인 경우 각 숫자의 세제곱합은 숫자 자체와 같습니다. 예:

153 =1 3 + 5 3 + 3 3 // 153은 암스트롱 숫자입니다.

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

설명

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

아래에 구현된 접근 방식은 간단합니다. 우리는 주어진 범위의 모든 숫자를 순회합니다. 모든 숫자에 대해 먼저 숫자의 자릿수를 계산합니다. 현재 숫자의 자릿수를 n이라고 합니다. 그것들을 우리는 모든 숫자의 세제곱의 합을 찾습니다. 합계가 I와 같으면 숫자를 인쇄합니다.

예시

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