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

C 언어로 숫자의 모든 자릿수가 나누어 떨어지는지 확인하는 프로그램

개요

주어진 숫자 n의 모든 자릿수가 그 숫자 자체를 나눌 수 있는지 확인하는 프로그램을 작성해 보겠습니다. 예를 들어 숫자가 'xy' 형태라면, x와 y 두 자릿수 모두 이 숫자를 나누어야 한다는 의미입니다.

예시

입력 – 24

출력 – Yes

설명 – 24 % 2 == 0, 24 % 4 == 0 이므로 자릿수 2와 4 모두 24를 나눌 수 있습니다.

접근 방법

조건문을 활용하여 각 자릿수가 0이 아니면서 동시에 해당 숫자를 나눌 수 있는지 검사합니다. 구체적인 절차는 다음과 같습니다.

  1. 숫자의 각 자릿수를 하나씩 추출하며 반복(iteration)합니다.
  2. 각 자릿수가 0인지 먼저 확인합니다. 0으로 나누는 연산은 정의되지 않으므로 반드시 제외해야 합니다.
  3. 자릿수가 원래 숫자를 나누는지, 즉 나머지가 0인지 검사합니다.
  4. 모든 자릿수가 조건을 만족하면 "Yes", 하나라도 만족하지 않으면 "No"로 판정합니다.

C 언어 구현 예제

#include <stdio.h>

int main() {
    int n = 24;
    int temp = n;
    int flag = 1;

    while (temp > 0) {
        int r = temp % 10;  // 마지막 자릿수 추출
        if (!(r != 0 && n % r == 0)) {
            flag = 0;  // 조건 불만족 시 플래그 해제
        }
        temp /= 10;  // 처리한 자릿수 제거
    }

    if (flag == 1)
        printf("The number is divisible by its digits");
    else
        printf("The number is not divisible by its digits");

    return 0;
}

실행 결과

The number is divisible by its digits

코드 설명

  • temp 변수 : 원본 숫자 n을 그대로 복사하여 사용합니다. 반복 과정에서 값이 계속 줄어들기 때문에 원본은 보존해야 합니다.
  • r = temp % 10 : 현재 가장 오른쪽에 있는 자릿수를 추출합니다. 반복마다 temp를 10으로 나누어 다음 자릿수로 이동합니다.
  • 0 처리 : 어떤 수도 0으로 나눌 수 없으므로, 숫자에 0이 포함되어 있으면 자동으로 "not divisible"로 판정됩니다.
  • flag 변수 : 모든 자릿수가 조건을 통과하면 1로 유지되고, 하나라도 실패하면 0으로 설정됩니다.

이 알고리즘의 시간 복잡도는 O(d)이며, 여기서 d는 숫자의 자릿수 개수입니다. 따라서 매우 효율적으로 동작합니다.