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

C++ 프로그램: 숫자의 홀수 자릿수 합과 짝수 자릿수 합의 차이 구하기

주어진 숫자에서 홀수 자릿수의 합짝수 자릿수의 합 사이의 차이를 구하는 문제입니다. 즉, 숫자를 구성하는 모든 자릿수를 확인하여 짝수와 홀수로 나눈 뒤, 각각의 합을 계산하고 그 차이를 구합니다.

예시

입력: 12345
출력: 3

설명

홀수 자릿수의 합: 1 + 3 + 5 = 9
짝수 자릿수의 합: 2 + 4 = 6
홀수 합 − 짝수 합 = 9 − 6 = 3

풀이 방법

숫자에서 한 자릿수씩 추출한 후, 해당 자릿수가 짝수인지 홀수인지 판별합니다. 짝수라면 짝수 합에 더하고, 그렇지 않다면 홀수 합에 더합니다. 마지막으로 두 합의 차이를 구하면 됩니다.

  1. 자릿수 추출: 나머지 연산(% 10)을 사용해 숫자의 마지막 자릿수를 얻습니다.
  2. 짝수·홀수 판별: 추출한 자릿수를 2로 나눈 나머지가 0이면 짝수, 아니면 홀수로 분류합니다.
  3. 합계 누적: 각각의 변수(even, odd)에 자릿수 값을 더해 누적합니다.
  4. 자릿수 제거: 숫자를 10으로 나누어(/= 10) 이미 처리한 자릿수를 제거합니다.
  5. 차이 계산: 반복이 끝나면 홀수 합에서 짝수 합을 뺀 값을 출력합니다.

C++ 코드 예제

#include <iostream>
using namespace std;
int main() {
    int n, r = 0;
    int diff = 0;
    int even = 0;
    int odd = 0;
    n = 12345;
    while(n != 0){
        r = n % 10;          // 마지막 자릿수 추출
        if(r % 2 == 0) {
            even += r;       // 짝수 합에 누적
        } else {
            odd += r;        // 홀수 합에 누적
        }
        n /= 10;             // 처리한 자릿수 제거
    }
    diff = odd - even;       // 두 합의 차이 계산
    printf("%d", diff);
    return 0;
}

코드 설명 및 실행 결과

위 코드는 n = 12345를 대상으로 동작하며, while 루프가 한 번 실행될 때마다 숫자의 마지막 자릿수를 하나씩 검사합니다. 모든 자릿수(5, 4, 3, 2, 1)를 처리하고 나면 odd 변수에는 9(= 1+3+5), even 변수에는 6(= 2+4)이 저장되고, 최종적으로 3이 출력됩니다.

이 알고리즘은 자릿수의 개수에 비례하여 반복하므로 시간 복잡도는 O(log₁₀ n), 추가 메모리 없이 몇 개의 변수만 사용하므로 공간 복잡도는 O(1)입니다.