Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 아담 수(Adam Number) 판별하기: 개념과 구현 방법

이 글에서는 주어진 숫자가 아담 수(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() 함수는 원래 수와 뒤집은 수의 제곱을 구한 뒤, 두 값이 서로 뒤집힌 관계인지 확인하여 참 또는 거짓을 반환합니다. 시간 복잡도는 자릿수에 비례하므로 매우 효율적입니다.