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

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

주어진 숫자 n이 있을 때, 그 숫자의 각 자릿수를 모두 더한 값으로 n을 나눌 수 있는지 확인해야 합니다. 이를 확인하려면 일의 자리부터 시작하여 모든 자릿수를 더한 후, 그 최종 합으로 원래 숫자를 나누면 됩니다.

예를 들어 숫자 "521"이 있다고 가정해 보겠습니다. 이 숫자의 자릿수 합은 "5 + 2 + 1 = 8"이지만, 521을 8로 나누면 나머지가 남기 때문에 나누어 떨어지지 않습니다.

반면 또 다른 예인 "60"의 경우 "6 + 0 = 6"이 되며, 60은 6으로 나누었을 때 나머지 없이 완전히 나누어 떨어집니다.

예시

입력: 55
출력: No
설명: 5+5 = 10; 55는 10으로 나누어 떨어지지 않음

입력: 12
출력: Yes
설명: 1+2 = 3; 12는 3으로 나누어 떨어짐

문제 해결 접근 방식

이 문제를 해결하려면 입력값에서 각 자릿수를 하나씩 추출하여 모든 자릿수의 합을 구한 다음, 그 합이 원래 숫자를 나눌 수 있는지 확인해야 합니다.

  • 숫자를 입력받습니다.
  • 일의 자리부터 각 자릿수를 추출하여, 초기값이 0으로 설정된 합계 변수에 더합니다.
  • 입력받은 숫자를 자릿수의 합으로 나눕니다.
  • 결과를 반환합니다.

알고리즘

함수 int isDivisible(long int num)
    단계 1 -> temp = num, sum = 0으로 선언 및 초기화
    단계 2 -> While num 반복
        k = num % 10으로 선언 및 초기화
        sum = sum + k로 설정
        num = num / 10으로 설정
    반복 종료
    단계 3 -> 만약 temp % sum == 0이라면,
        1 반환
    단계 4 -> 0 반환
    함수 종료
main() 함수에서
    단계 1 -> num = 55로 선언 및 초기화
    단계 2 -> 만약 isDivisible(num)이라면,
        "yes" 출력
    단계 3 -> 아니라면
        "no" 출력

C 코드 구현

#include <stdio.h>
// 이 함수는 주어진 숫자가
// 자릿수의 합으로 나누어 떨어지는지 확인합니다.
int isDivisible(long int num) {
    long int temp = num;
    // 자릿수의 합 구하기
    int sum = 0;
    while (num) {
        int k = num % 10;
        sum = sum + k;
        num = num / 10;
    }
    // 자릿수의 합이 num을 나눌 수 있는지 확인
    if (temp % sum == 0)
        return 1;
        return 0;
}
int main() {
    long int num = 55;
    if(isDivisible(num))
        printf("yes\n");
    else
        printf("no\n");
        return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

No

코드 설명

위 코드의 동작 원리를 살펴보겠습니다.

  • isDivisible 함수: 먼저 원래 숫자를 temp 변수에 백업해 둡니다. 그다음 while 루프를 사용하여 num % 10으로 마지막 자릿수를 추출하고, 이를 sum에 누적합니다. 이후 num / 10으로 이미 처리한 자릿수를 제거하는 과정을 반복합니다.
  • 나눗셈 검증: 모든 자릿수의 합을 구한 후, 백업해 둔 tempsum으로 나누어 나머지가 0인지 확인합니다. 나머지가 0이면 1(참), 그렇지 않으면 0(거짓)을 반환합니다.
  • main 함수: 테스트할 숫자(55)를 준비하고, 함수의 반환값에 따라 "yes" 또는 "no"를 출력합니다.

55의 경우 자릿수의 합이 5 + 5 = 10이지만, 55 ÷ 10 = 5.5로 나누어 떨어지지 않으므로 결과는 "No"입니다. 만약 입력값을 12나 60처럼 자릿수의 합으로 정확히 나누어 떨어지는 숫자로 바꾸면 "Yes"가 출력됩니다.