C 언어로 암스트롱 수 판별하기

CBeginner
지금 연습하기

소개

이 실험에서는 C 프로그램을 사용하여 주어진 숫자가 암스트롱 수인지 확인하는 방법을 배웁니다. 먼저 사용자로부터 정수 입력을 받은 다음, 각 자릿수를 전체 자릿수의 거듭제곱으로 계산하고, 마지막으로 숫자가 암스트롱 수인지 아닌지를 출력합니다.

프로그램은 입력을 받는 단계부터 숫자가 암스트롱 수인지 판별하는 단계까지 사용자를 단계별로 안내합니다.

정수 입력

이 단계에서는 C 프로그램에서 사용자로부터 정수 입력을 받아 암스트롱 수인지 확인하는 방법을 배웁니다.

먼저 프로젝트 디렉토리에 새로운 C 파일을 생성합니다.

cd ~/project
nano armstrong.c

이제 정수를 읽는 초기 코드를 작성합니다.

#include <stdio.h>

int main() {
    int number;

    // 사용자에게 암스트롱 수인지 확인할 숫자를 입력하도록 프롬프트합니다.
    printf("암스트롱 수인지 확인할 숫자를 입력하세요: ");

    // 정수 입력을 읽습니다.
    scanf("%d", &number);

    // 입력된 숫자를 출력하여 입력을 확인합니다.
    printf("입력한 숫자: %d\n", number);

    return 0;
}

프로그램을 컴파일하고 실행합니다.

gcc armstrong.c -o armstrong
./armstrong

예시 출력:

암스트롱 수인지 확인할 숫자를 입력하세요: 153
입력한 숫자: 153

코드를 분석해 보겠습니다.

  • scanf("%d", &number)는 사용자 입력에서 정수를 읽습니다.
  • &numbernumber 변수의 메모리 주소를 전달합니다.
  • printf()는 사용자에게 프롬프트하고 입력된 숫자를 표시하는 데 사용됩니다.

각 자릿수를 자릿수 개수의 거듭제곱으로 한 합 계산

이 단계에서는 이전 프로그램을 수정하여 각 자릿수를 전체 자릿수의 거듭제곱으로 한 합을 계산합니다.

armstrong.c 파일을 엽니다.

cd ~/project
nano armstrong.c

자릿수 합을 계산하도록 코드를 업데이트합니다.

#include <stdio.h>
#include <math.h>

int main() {
    int number, originalNumber, remainder, digitCount = 0;
    long long digitSum = 0;

    // 사용자에게 암스트롱 수인지 확인할 숫자를 입력하도록 프롬프트합니다.
    printf("암스트롱 수인지 확인할 숫자를 입력하세요: ");
    scanf("%d", &number);

    // 나중에 비교하기 위해 원래 숫자를 저장합니다.
    originalNumber = number;

    // 자릿수를 셉니다.
    while (number != 0) {
        number /= 10;
        digitCount++;
    }

    // number 를 원래 값으로 되돌립니다.
    number = originalNumber;

    // 각 자릿수를 자릿수 개수의 거듭제곱으로 한 합을 계산합니다.
    while (number != 0) {
        remainder = number % 10;
        digitSum += pow(remainder, digitCount);
        number /= 10;
    }

    // 결과를 출력합니다.
    printf("자릿수 개수: %d\n", digitCount);
    printf("자릿수를 거듭제곱한 합: %lld\n", digitSum);

    return 0;
}

수학 라이브러리와 함께 프로그램을 컴파일합니다.

gcc armstrong.c -o armstrong -lm
./armstrong

예시 출력:

암스트롱 수인지 확인할 숫자를 입력하세요: 153
자릿수 개수: 3
자릿수를 거듭제곱한 합: 153

핵심 개념 설명:

  • digitCount는 자릿수를 추적합니다.
  • pow(remainder, digitCount)는 각 자릿수를 전체 자릿수 개수의 거듭제곱으로 계산합니다.
  • number % 10은 마지막 자릿수를 추출합니다.
  • number /= 10은 각 반복에서 마지막 자릿수를 제거합니다.
  • long long은 잠재적으로 큰 자릿수 합을 처리하는 데 사용됩니다.

암스트롱 수 여부 출력

이 단계에서는 계산된 자릿수 합과 원래 숫자를 비교하여 암스트롱 수 검사기를 완성합니다.

armstrong.c 파일을 엽니다.

cd ~/project
nano armstrong.c

숫자가 암스트롱 수인지 판별하고 출력하도록 코드를 업데이트합니다.

#include <stdio.h>
#include <math.h>

int main() {
    int number, originalNumber, remainder, digitCount = 0;
    long long digitSum = 0;

    // 사용자에게 암스트롱 수인지 확인할 숫자를 입력하도록 프롬프트합니다.
    printf("암스트롱 수인지 확인할 숫자를 입력하세요: ");
    scanf("%d", &number);

    // 나중에 비교하기 위해 원래 숫자를 저장합니다.
    originalNumber = number;

    // 자릿수를 셉니다.
    while (number != 0) {
        number /= 10;
        digitCount++;
    }

    // number 를 원래 값으로 되돌립니다.
    number = originalNumber;

    // 각 자릿수를 자릿수 개수의 거듭제곱으로 한 합을 계산합니다.
    while (number != 0) {
        remainder = number % 10;
        digitSum += pow(remainder, digitCount);
        number /= 10;
    }

    // 숫자가 암스트롱 수인지 확인합니다.
    if (digitSum == originalNumber) {
        printf("%d는 암스트롱 수입니다.\n", originalNumber);
    } else {
        printf("%d는 암스트롱 수가 아닙니다.\n", originalNumber);
    }

    return 0;
}

프로그램을 컴파일합니다.

gcc armstrong.c -o armstrong -lm
./armstrong

예시 출력:

암스트롱 수인지 확인할 숫자를 입력하세요: 153
153는 암스트롱 수입니다.

암스트롱 수인지 확인할 숫자를 입력하세요: 154
154는 암스트롱 수가 아닙니다.

핵심 개념 설명:

  • digitSumoriginalNumber를 비교합니다.
  • 같으면 암스트롱 수입니다.
  • 프로그램은 다양한 입력 시나리오를 처리합니다.

요약

이 실험에서는 사용자로부터 정수 입력을 받고, 각 자릿수를 전체 자릿수의 거듭제곱으로 한 합을 계산하며, 숫자가 암스트롱 수인지 판별하는 방법을 배웁니다. 첫 번째 단계는 사용자에게 숫자를 입력하도록 요청하고 변수에 저장하는 것입니다. 두 번째 단계는 각 자릿수를 전체 자릿수의 거듭제곱으로 한 합을 계산하는 데 중점을 두며, 이 값을 원래 숫자와 비교하여 암스트롱 수인지 확인합니다.