이 글에서는 주어진 숫자가 아담 수(Adam Number)인지 판별하는 C++ 프로그램을 작성하는 방법을 알아봅니다. 코드를 살펴보기 전에, 먼저 아담 수가 무엇인지 정확히 이해해 보겠습니다.
아담 수란?
어떤 수 n이 있을 때, n의 제곱과 n을 뒤집은 수의 제곱이 서로 뒤집힌 관계라면 그 수를 아담 수라고 합니다.
예를 들어 숫자 13을 생각해 보겠습니다.
- 13을 뒤집으면 31이 됩니다.
- 13의 제곱은 169입니다.
- 31의 제곱은 961입니다.
- 169와 961은 서로 뒤집힌 관계입니다.
따라서 13은 아담 수입니다. 같은 원리로 12는 제곱이 144이고, 뒤집은 수 21의 제곱은 441이므로 역시 아담 수에 해당합니다.
아담 수 판별 절차
주어진 숫자가 아담 수인지 확인하는 과정은 다음 단계로 진행할 수 있습니다.
- 숫자 n을 입력받습니다.
- n을 뒤집은 값을 m에 저장합니다.
- n의 제곱을 구하여 sq_n에 저장합니다.
- m의 제곱을 구하여 sq_m에 저장합니다.
- sq_n과 sq_m을 뒤집은 값이 서로 같은지 비교합니다.
C++ 구현 예제
#include<iostream>
using namespace std;
// 숫자를 뒤집는 함수
int reverseNumber(int num) {
int res = 0;
while(num != 0) {
res = res * 10 + num % 10; // 마지막 자릿수를 잘라 결과에 추가
num /= 10; // 숫자를 한 자릿수 줄임
}
return res;
}
// 아담 수 여부를 검사하는 함수
bool checkAdamNumber(int num) {
int rev_num = reverseNumber(num);
// 원래 수와 뒤집은 수의 제곱을 각각 계산
int sq_num = num * num;
int sq_rev_num = rev_num * rev_num;
// 두 제곱값이 서로 뒤집힌 관계라면 아담 수
if(sq_num == reverseNumber(sq_rev_num)) {
return true;
}
return false;
}
main() {
int num;
cout << "아담 수인지 확인할 숫자를 입력하세요:";
cin >> num;
if(checkAdamNumber(num)) {
cout << "입력한 숫자는 아담 수입니다";
} else {
cout << "입력한 숫자는 아담 수가 아닙니다";
}
}실행 결과 1
아담 수인지 확인할 숫자를 입력하세요:13 입력한 숫자는 아담 수입니다
실행 결과 2
아담 수인지 확인할 숫자를 입력하세요:25 입력한 숫자는 아담 수가 아닙니다
코드 설명
reverseNumber() 함수는 나머지 연산(% 10)으로 마지막 자릿수를 하나씩 추출하고, 이를 결과 값에 자릿수를 밀어가며 더하는 방식으로 숫자를 뒤집습니다. checkAdamNumber() 함수는 원래 수와 뒤집은 수의 제곱을 구한 뒤, 두 값이 서로 뒤집힌 관계인지 확인하여 참 또는 거짓을 반환합니다. 시간 복잡도는 자릿수에 비례하므로 매우 효율적입니다.