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

C++로 엑셀 열 번호를 알파벳 문자로 변환하는 방법

엑셀 열 번호 체계란?

엑셀에서 열 이름은 알파벳 문자로 표현됩니다. A부터 시작해서 Z까지 진행된 후, 다시 AA, AB처럼 두 글자 조합으로 넘어가고 ZZ 이후에는 AAA, AAB와 같은 방식으로 계속 확장됩니다. 즉, 1번 열은 A, 26번 열은 Z, 27번 열은 AA에 해당합니다. 이번 글에서는 숫자로 주어진 열 번호를 실제 열 문자로 변환하는 방법을 알아보겠습니다. 예를 들어 열 번호가 80이라면 변환 결과는 CB가 됩니다.

변환 알고리즘의 원리

숫자 n이 주어졌을 때(예: n = 28), 먼저 n을 26으로 나눈 나머지를 구합니다.

  • 나머지가 0인 경우: 해당 수는 26, 52처럼 26의 배수이므로 출력 문자열에 'Z'를 추가하고, n의 값을 n/26 - 1로 갱신합니다.
  • 나머지가 0이 아닌 경우: 나머지 값에 대응하는 문자('A'부터 시작)를 문자열에 추가하고, n을 n/26으로 갱신합니다.

이 과정을 n이 0이 될 때까지 반복한 뒤, 마지막에 문자열을 뒤집으면 원하는 열 이름이 완성됩니다.

C++ 구현 예제

#include<iostream>
#include<algorithm>
using namespace std;
void showColumnLetters(int n) {
   string str = "";
   while (n) {
      int rem = n%26;
      if (rem==0) {
         str += 'Z';
         n = (n/26)-1;
      }
      else{
         str += (rem-1) + 'A';
         n = n/26;
      }
   }
   reverse(str.begin(), str.begin() + str.length());
   cout << str << endl;
}
int main() {
   int n = 700;
   cout << "Cell name of " << n << " is: ";
   showColumnLetters(700);
}

동작 과정 살펴보기 (n = 700)

  • 700 ÷ 26 = 몫 27, 나머지 18 → 문자 'R'에 해당하는 단계로 처리, n = 27
  • 나머지 계산을 반복하며 각 자릿수에 해당하는 문자를 차례로 추가
  • n이 0이 되면 반복 종료 후 문자열을 뒤집어 최종 결과 도출

실행 결과

입력:

Cell number: 700

출력:

Enter cell number:700
Cell name of 700 is: ZX

이처럼 나머지 연산만 활용하면 별도의 라이브러리 없이도 엑셀 스타일의 열 이름을 손쉽게 계산할 수 있습니다. 이 알고리즘은 사실상 10진수를 26진수로 변환하는 과정과 유사하되, 0이 없는 특수한 진법 체계를 다룬다는 점이 흥미로운 부분입니다.