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

C++에서 정수의 짝수·홀수 자릿수 개수 세기

문제 개요

하나의 정수가 주어졌을 때, 그 수를 이루는 각 자릿수 가운데 짝수와 홀수가 각각 몇 개인지 세는 것이 이번 문제의 목표입니다. 나아가 짝수 자릿수는 짝수 번, 홀수 자릿수는 홀수 번 나타나는지까지 함께 확인해야 합니다.

예시

입력 − digit = 12345
출력 − 짝수 자릿수 개수 = 2
      홀수 자릿수 개수 = 3

설명 − 짝수 자릿수(2, 4)가 총 2번, 즉 짝수 번 나타나고 홀수 자릿수(1, 3, 5)가 총 3번, 즉 홀수 번 나타나므로 조건을 만족합니다.

입력 − digit = 44556
출력 − 짝수 자릿수 개수 = 3
      홀수 자릿수 개수 = 2

설명 − 짝수 자릿수(4, 4, 6)가 3번, 즉 홀수 번 나타나고 홀수 자릿수(5, 5)가 2번, 즉 짝수 번 나타나므로 조건을 만족하지 않습니다.

풀이 접근 방법

  • 짝수 자릿수와 홀수 자릿수를 포함하는 정수 값을 입력받습니다.
  • 짝수 자릿수를 세는 변수와 홀수 자릿수를 세는 변수 두 개를 선언하고 0으로 초기화합니다.
  • 숫자가 0보다 큰 동안 반복문을 실행하면서 n / 10으로 값을 줄여가며 한 자릿수씩 추출합니다.
  • 추출한 자릿수를 2로 나누었을 때 나머지가 0이면 짝수, 그렇지 않으면 홀수로 판별합니다.
  • 자릿수가 짝수이면 짝수 카운트를 1 증가시키고, 홀수이면 홀수 카운트를 1 증가시킵니다.
  • 짝수 자릿수가 짝수 번 나타났는지 확인하려면 짝수 카운트를 2로 나눈 나머지가 0인지 검사합니다.
  • 홀수 자릿수가 홀수 번 나타났는지 확인하려면 홀수 카운트를 2로 나눈 나머지가 0이 아닌지 검사합니다.
  • 최종 결과를 출력합니다.

예제 코드

#include <iostream>
using namespace std;
int main(){
    int n = 12345, e_count = 0, o_count = 0;
    int flag;
    while (n > 0){
        int rem = n % 10;
        if (rem % 2 == 0){
            e_count++;
        } else {
            o_count++;
        }
        n = n / 10;
    }
    cout << "Count of Even numbers : " << e_count;
    cout << "\nCount of Odd numbers : " << o_count;
    // 짝수 개수는 짝수이고 홀수 개수는 홀수인지 확인
    if (e_count % 2 == 0 && o_count % 2 != 0){
        flag = 1;
    } else {
        flag = 0;
    }
    if (flag == 1){
        cout << "\nYes " << endl;
    } else {
        cout << "\nNo " << endl;
    }
    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Count of Even numbers : 2
Count of Odd numbers : 3
Yes

12345에는 짝수 자릿수가 2개(2, 4), 홀수 자릿수가 3개(1, 3, 5) 있으므로 ‘짝수 개수는 짝수, 홀수 개수는 홀수’라는 조건을 충족하여 Yes가 출력됩니다.