Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java)로 두 숫자 사이의 암스트롱 수(Armstrong Number) 출력하기

이 글에서는 자바(Java)를 사용하여 주어진 두 숫자 사이에 존재하는 암스트롱 수(Armstrong Number)를 찾아 출력하는 방법을 알아봅니다.

암스트롱 수란 각 자릿수를 분리하여 세제곱한 뒤 모두 더했을 때, 그 합이 원래의 수와 같아지는 수를 말합니다. 일반화하여 표현하면 n자리 정수의 모든 자릿수를 세제곱해 합산한 결과가 원래 수와 동일할 때 그 수를 암스트롱 수라고 부르며, abcd... = a³ + b³ + c³ + d³ + ... 의 관계가 성립합니다.

특히 3자리 암스트롱 수의 경우, 각 자릿수의 세제곱 합이 수 자신과 정확히 일치합니다. 대표적인 예로 153이 있으며, 이는 다음과 같이 계산됩니다.

153 = 1³ + 5³ + 3³

또 다른 예인 370 역시 암스트롱 수입니다.

370 = 27 + 343 + 0

입력 및 출력 예시

예를 들어 입력값이 다음과 같다고 가정해 보겠습니다.

1 & 500

이때 기대되는 출력 결과는 다음과 같습니다.

1과 500 사이의 암스트롱 수는 1, 153, 370, 371, 407 입니다

알고리즘

  1. 시작
  2. 네 개의 정수 변수를 선언합니다: my_input_1, my_input_2, i, sum
  3. 사용자에게 두 개의 정수 값 입력을 요청하거나, 정수 값을 직접 정의합니다
  4. 입력받은 값을 읽어들입니다
  5. for 반복문을 실행하며 %, /, * 연산자를 활용해 암스트롱 수를 판별합니다
  6. 현재 수(check)를 10으로 나눈 나머지를 구합니다
  7. 나머지(rem)를 세 번 곱한 값을 sum에 더하고, 그 결과를 현재 sum으로 설정합니다
  8. check를 10으로 나눈 몫을 새로운 check 값으로 설정합니다
  9. 결과를 화면에 출력합니다
  10. 종료

예제 1: 사용자 입력을 받는 경우

다음 예제에서는 Scanner 객체를 통해 사용자로부터 직접 두 개의 숫자를 입력받아 처리합니다.

import java.util.Scanner;
public class ArmstrongNumbers {
   public static void main(String args[]){
      int my_low, my_high, check, my_rem, my_sum, i;
      Scanner my_scanner = new Scanner(System.in);
      System.out.println("Required packages have been imported");
      System.out.println("A scanner object has been defined ");
      System.out.println("Enter the first number :");
      my_low = my_scanner.nextInt();
      System.out.println("Enter the limit :");
      my_high = my_scanner.nextInt();
      System.out.println("The Armstrong numbers are :");
      for (i = my_low; i<my_high; i++){
         my_sum = 0;
         check = i;
         while(check != 0) {
            my_rem = check % 10;
            my_sum = my_sum + (my_rem * my_rem * my_rem);
            check = check / 10;
         }
         if(my_sum == i){
            System.out.println(i);
         }
      }
   }
}

실행 결과

Required packages have been imported
A scanner object has been defined
Enter the first number :
1
Enter the limit :
500
The Armstrong numbers are :
1
153
370
371
407

예제 2: 값이 미리 정의된 경우

다음 예제에서는 숫자 값이 코드 내에 미리 정의되어 있으며, 별도의 입력 없이 콘솔에 바로 결과를 출력합니다.

public class ArmstrongNumbers {
    public static void main(String args[]){
        int my_low, my_high, check, my_rem, my_sum, i;
        my_low = 1;
        my_high = 500;
        System.out.printf("The first number is %d and the limit is %d ", my_low, my_high);
        System.out.println("\nThe Armstrong numbers are :");
        for (i = my_low; i<my_high; i++){
            my_sum = 0;
            check = i;
            while(check != 0) {
                my_rem = check % 10;
                my_sum = my_sum + (my_rem * my_rem * my_rem);
                check = check / 10;
            }
            if(my_sum == i){
                System.out.println(i);
            }
        }
    }
}

실행 결과

The first number is 1 and the limit is 500
The Armstrong numbers are :
1
153
370
371
407