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

홀수 자리와 짝수 자리 숫자 합의 차이가 0인지 확인하는 C 프로그램

하나의 긴 정수가 주어졌을 때, 홀수 위치에 있는 자릿수들의 합짝수 위치에 있는 자릿수들의 합의 차이가 0인지 아닌지를 판별해야 합니다. 여기서 위치는 가장 왼쪽 자릿수부터 0으로 시작합니다.

예를 들어 숫자가 156486이라고 가정해 보겠습니다. 홀수 위치 자릿수의 합은 (5 + 4 + 6) = 15이고, 짝수 위치 자릿수의 합은 (1 + 6 + 8) = 15입니다. 따라서 두 합은 서로 같습니다.

문제 해결 접근 방법

이 문제는 두 가지 방법으로 해결할 수 있습니다.

첫 번째 방법: 숫자를 처음부터 끝까지 순회하면서 위치를 번갈아 가며 각각의 합을 구한 후, 두 합의 차이를 계산합니다.

두 번째 방법(더 간단하고 효율적): 숫자가 11로 나누어 떨어지는지만 확인하면 됩니다. 수학적으로 잘 알려진 성질에 의해, 어떤 수가 11로 나누어 떨어진다면 교대 위치 자릿수 합의 차이는 반드시 0입니다. 즉, 홀수 위치 숫자들의 합과 짝수 위치 숫자들의 합이 같다면 그 수는 11의 배수라는 것입니다.

알고리즘

isDiffZero(n)

begin
   if n is divisible by 11, then
      return 1
   else
      return 0
   end if
end

C 언어 구현 예제

#include<stdio.h>
long isDiffZero(int n) {
   if(n % 11 == 0){
      return 1;
   } else {
      return 0;
   }
}
main() {
   int n;
   printf("Enter a number: ");
   scanf("%d", &n);
   if(isDiffZero(n)) {
      printf("Difference is zero");
   } else {
      printf("Difference is non zero");
   }
}

실행 결과

Enter a number: 156486
Difference is zero

동작 원리 설명

위 코드에서 핵심은 n % 11 == 0 조건입니다. 모듈로 연산자(%)를 사용하여 입력받은 숫자를 11로 나눈 나머지가 0인지 확인합니다. 나머지가 0이면 해당 숫자는 11의 배수이므로 홀수 위치와 짝수 위치 자릿수 합의 차이가 0임을 의미하고, 함수는 1을 반환합니다. 그렇지 않으면 0을 반환하여 차이가 0이 아님을 나타냅니다.

이 방법은 자릿수를 하나씩 분리하여 합을 계산하는 방식보다 시간 복잡도 면에서 훨씬 효율적이며, 코드도 훨씬 간결합니다.