암스트롱 수란 무엇인가?
암스트롱 수(Armstrong Number)는 각 자릿수를 세제곱하여 모두 더한 값이 원래의 수와 같아지는 수를 말합니다. 가장 대표적인 예가 153입니다. 153은 1³ + 5³ + 3³ = 1 + 125 + 27 = 153이 되므로 암스트롱 수에 해당합니다.
while 루프로 탐색 범위 설정하기
1부터 1000 사이의 암스트롱 수를 찾으려면 먼저 while 루프를 사용하여 반복 범위를 지정합니다.
while (val <= 1000) {
// 처리 로직
}각 자릿수 분리하기
while 루프 내부에서 나눗셈 연산을 조합하면 일의 자리, 십의 자리, 백의 자리 숫자를 손쉽게 추출할 수 있습니다.
d1 = val - ((val / 10) * 10); // 일의 자리
d2 = (val / 10) - ((val / 100) * 10); // 십의 자리
d3 = (val / 100) - ((val / 1000) * 10); // 백의 자리정수 나눗셈의 성질을 활용하면 별도의 문자열 변환 없이도 숫자형 데이터에서 바로 각 자릿수를 얻을 수 있다는 점이 이 방식의 장점입니다.
자릿수의 세제곱 합 계산하기
암스트롱 수 판별은 모든 자릿수의 세제곱 값을 기준으로 이루어집니다. 따라서 추출한 각 자릿수를 세제곱한 뒤 모두 더하고, 그 결과가 원래 수와 일치하는지 비교합니다.
res = (d1 * d1 * d1) + (d2 * d2 * d2) + (d3 * d3 * d3);
if (res == val) {
Console.WriteLine(temp);
}세제곱의 합(res)이 원래 수(val)와 같다면 해당 수는 암스트롱 수입니다. 위 조건을 만족하는 수만 화면에 출력됩니다.
전체 실행 예제
지금까지의 내용을 하나의 완성된 프로그램으로 정리하면 다음과 같습니다.
using System;
class Program {
static void Main() {
int val = 1;
while (val <= 1000) {
int temp = val;
int d1 = val - ((val / 10) * 10);
int d2 = (val / 10) - ((val / 100) * 10);
int d3 = (val / 100) - ((val / 1000) * 10);
int res = (d1 * d1 * d1) + (d2 * d2 * d2) + (d3 * d3 * d3);
if (res == val) {
Console.WriteLine(temp);
}
val++;
}
}
}이 프로그램을 실행하면 1부터 1000 사이의 암스트롱 수인 1, 153, 370, 371, 407이 차례대로 출력됩니다. 이처럼 while 루프와 정수 나눗셈만으로도 자릿수 분리 및 암스트롱 수 판별 로직을 간단하게 구현할 수 있습니다.