이 글에서는 자바(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 입니다
알고리즘
- 시작
- 네 개의 정수 변수를 선언합니다: my_input_1, my_input_2, i, sum
- 사용자에게 두 개의 정수 값 입력을 요청하거나, 정수 값을 직접 정의합니다
- 입력받은 값을 읽어들입니다
- for 반복문을 실행하며 %, /, * 연산자를 활용해 암스트롱 수를 판별합니다
- 현재 수(check)를 10으로 나눈 나머지를 구합니다
- 나머지(rem)를 세 번 곱한 값을 sum에 더하고, 그 결과를 현재 sum으로 설정합니다
- check를 10으로 나눈 몫을 새로운 check 값으로 설정합니다
- 결과를 화면에 출력합니다
- 종료
예제 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