자바에서 암스트롱 수 판별 및 나열하기: for 루프 활용
암스트롱 수가 무엇인가?
암스트롱 수(나르시시스트 수)는 각 자릿수를 전체 자릿수만큼 제곱한 것의 합이 자기 자신과 같은 수입니다.
수학적으로, 자릿수가 x, y, … z이고 자릿수가 n개인 숫자에 대해:
xy…z = xn + yn + … + zn
암스트롱 수 예시:
0, 1, 4, 5, 9, 153, 371, 407, 8208, …
자바로 암스트롱 수 판별하기
주어진 정수가 암스트롱 수인지 검증하는 간결한 자바 구현입니다. 알고리즘은 각 자릿수를 순회하며 자릿수의 세제곱(세 자리 수에 초점)을 누적하고, 합을 원래 숫자와 비교합니다.
// while 루프로 암스트롱 수 판별
package com.guru99;
public class ArmstrongNumber {
public static void main(String[] args) {
int inputArmstrongNumber = 153; // 테스트할 숫자
int tempNumber, digit, digitCubeSum = 0;
tempNumber = inputArmstrongNumber;
while (tempNumber != 0) {
System.out.println("Current Number is " + tempNumber);
digit = tempNumber % 10;
System.out.println("Current Digit is " + digit);
digitCubeSum += digit * digit * digit;
System.out.println("Current digitCubeSum is " + digitCubeSum);
tempNumber /= 10;
}
if (digitCubeSum == inputArmstrongNumber)
System.out.println(inputArmstrongNumber + " is an Armstrong Number");
else
System.out.println(inputArmstrongNumber + " is not an Armstrong Number");
}
}
출력
Current Number is 153
Current Digit is 3
Current digitCubeSum is 27
Current Number is 15
Current Digit is 5
Current digitCubeSum is 152
Current Number is 1
Current Digit is 1
Current digitCubeSum is 153
153 is an Armstrong Number
0부터 999까지 모든 암스트롱 수 나열하기
다음 프로그램은 0~999 범위의 모든 암스트롱 수를 열거하는 방법을 보여줍니다. 범위에는 for 루프를, 각 후보 처리에는 while 루프를 활용합니다.
// 0부터 999까지 암스트롱 수 열거
package com.guru99;
public class ArmstrongNumber {
public static void main(String[] args) {
for (int inputArmstrongNumber = 0; inputArmstrongNumber < 1000; inputArmstrongNumber++) {
int tempNumber = inputArmstrongNumber;
int digitCubeSum = 0;
while (tempNumber != 0) {
int digit = tempNumber % 10;
digitCubeSum += digit * digit * digit;
tempNumber /= 10;
}
if (digitCubeSum == inputArmstrongNumber)
System.out.println(inputArmstrongNumber + " is an Armstrong Number");
}
}
}
출력
0 is an Armstrong Number
1 is an Armstrong Number
153 is an Armstrong Number
370 is an Armstrong Number
371 is an Armstrong Number
407 is an Armstrong Number