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

C++로 주어진 범위 안의 16진수 알파벳 개수 계산하기

시작 값과 끝 값으로 이루어진 범위가 주어졌을 때, 해당 범위 안에 포함된 16진수 알파벳의 개수를 계산하는 것이 이 글의 목표입니다.

16진수 알파벳이란?

컴퓨터 분야에서 16진수(hexadecimal)는 밑(base)이 16인 수 체계를 의미합니다. 하나의 자릿수를 16개의 기호로 표현할 수 있으며, 0부터 15까지의 정수 값으로 구성됩니다. 이때 10부터 15까지는 각각 알파벳으로 대체되어 표현되는데, 10은 A, 11은 B, 12는 C, 13은 D, 14는 E, 15는 F에 해당합니다.

따라서 아래 프로그램의 핵심 과제는 주어진 범위 안에 16진수 알파벳(A~F)이 몇 개나 등장하는지 찾아내는 것입니다.

예시

입력 − start = 10, end = 13
출력 − 4

설명 − 10과 13 사이에는 4개의 16진수가 존재합니다. 즉, 10은 A, 11은 B, 12는 C, 13은 D로 표현되므로 정답은 4입니다.

입력 − start = 15, end = 16
출력 − 1

설명 − 이 범위에서 16진수 알파벳은 15(F) 하나뿐입니다. 16은 16진수로 10(십육이 아니라 '일영')으로 표현되기 때문에 알파벳에 해당하지 않습니다.

프로그램의 접근 방식

  • start와 end 두 변수로 범위를 입력받습니다.

  • 개수를 저장할 변수 count를 선언하고 0으로 초기화합니다.

  • i를 start부터 end까지 반복하는 for 루프를 시작합니다.

  • 루프 안에서 i가 10 이상 15 이하이면, 해당 숫자는 한 자리 16진수 알파벳(A~F)이므로 count를 1 증가시킵니다.

  • 그렇지 않고 i가 15보다 크다면, 임시 변수 k에 i의 값을 넣고 k가 0이 아닌 동안 반복합니다.

  • 반복 과정에서 k % 16(현재 자릿값)이 10 이상인지 확인하여, 조건을 만족하면 count를 1 증가시킵니다.

  • k를 k / 16으로 갱신해 다음 자릿수로 이동합니다.

  • 모든 반복이 끝나면 count 값을 반환하고 결과를 출력합니다.

구현 예제

#include <iostream>
using namespace std;
// 16진수 알파벳의 총 개수를 세는 함수
int counthexa(int start, int end){
   int result = 0;
   for (int i = start; i <= end; i++){
      // 10부터 15까지의 모든 16진수 알파벳
      if (i >= 10 && i <= 15){
         result++;
      }
      // i > 15인 경우, 수가 0보다 클 때까지
      // 16으로 나눈 나머지를 반복적으로 확인
      // 나머지가 10 이상이면 카운트 증가
      else if (i > 15){
         int k = i;
         while (k != 0){
            if (k % 16 >= 10){
               result++;
            }
            k = k / 16;
         }
      }
   }
   return result;
}
// 메인 함수
int main(){
   int start = 10, end = 60;
   cout << "count is: "<<counthexa(start, end);
   return 0;
}

실행 결과

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

count is: 21

즉, 10부터 60 사이의 숫자들을 16진수로 변환했을 때 A~F 알파벳이 총 21번 등장한다는 의미입니다. 이 접근 방식의 시간 복잡도는 O(n × log₁₆ n)으로, 범위의 크기와 각 숫자의 16진수 자릿수에 비례합니다.