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

주어진 열 번호에 해당하는 Excel 열 제목을 출력하는 C 프로그램


문제 정의

주어진 열 번호(정수 값)에 해당하는 Excel 열 제목을 출력하는 프로그램을 작성해야 합니다. 사용자가 정수를 입력하면, 프로그램은 그 번호에 대응하는 Excel 열 제목을 화면에 출력합니다.

해결 방법

C 언어에서 주어진 열 번호에 해당하는 Excel 열 제목을 출력하는 방법은 다음과 같습니다.

예제 1

열 번호와 열 제목의 대응 관계는 아래와 같습니다.

1 -> A
2 -> B
...
26 -> Z
27 -> AA
28 -> AB
...

예제 2

  • 입력은 다음과 같습니다 −
number = 3
number = 27
number = 151
  • 출력은 다음과 같습니다 −
Excel column title: C
Excel column title: AA
Excel column title: EU

동작 원리

Excel의 열 제목 체계는 26진법과 비슷하지만, 숫자 0이 존재하지 않는 특수한 진법(바이젝티브 26진법) 구조입니다. 즉, 각 자릿수는 A부터 Z까지 26개의 알파벳으로 표현됩니다.

핵심 알고리즘은 다음 세 단계로 요약할 수 있습니다.

  • (column_no - 1) % 26 연산을 통해 가장 마지막(오른쪽) 자리의 문자를 구합니다.
  • (column_no - 1) / 26 연산을 통해 다음 자릿수를 처리합니다.
  • 문자는 뒤에서부터 차례로 생성되므로, 마지막에 문자열을 역순으로 뒤집어 완성합니다.

또한 입력값이 0 이하일 경우에는 유효한 열 제목이 존재하지 않으므로 빈 문자열을 반환하도록 처리했습니다.

예제 코드

다음은 주어진 열 번호에 해당하는 Excel 열 제목을 출력하는 C 프로그램입니다 −

#include <stdio.h>
static char *convert_To_Excel_Title(int column_no){
    if (column_no <= 0) {
        return "";
    }
    char *result = malloc(1024);
    int len = 0;
    do {
        result[len++] = ((column_no - 1) % 26) + 'A';
        column_no = (column_no - 1) / 26;
    } while (column_no > 0);
    result[len] = '\0';
    int i, j;
    for (i = 0, j = len - 1; i < j; i++, j--) {
        char c = result[i];
        result[i] = result[j];
        result[j] = c;
    }
    return result;
}
int main(void){
    int n;
    printf("enter the integer1:");
    scanf("%d",&n);
    printf("Column Number n = %d", n);
    printf("\nExcel column title: %s\n\n ",convert_To_Excel_Title(n));
    printf("enter the integer2:");
    scanf("%d",&n);
    printf("\nColumn Number n = %d", n);
    printf("\nExcel column title: %s\n\n ",convert_To_Excel_Title(n));
    printf("enter the integer3:");
    scanf("%d",&n);
    printf("\n\nColumn Number n = %d", n);
    printf("\nExcel column title: %s ",convert_To_Excel_Title(n));
    return 0;
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다 −

enter the integer1:23
Column Number n = 23
Excel column title: W

enter the integer2:12

Column Number n = 12
Excel column title: L

enter the integer3:69


Column Number n = 69
Excel column title: BQ

예를 들어 69를 입력하면 BQ가 출력되는데, 이는 69를 26으로 나누었을 때 몫과 나머지가 각각 두 번째 자리의 B와 첫 번째 자리의 Q에 대응하기 때문입니다. 이처럼 반복적인 나눗셈과 나머지 연산만으로 어떤 큰 열 번호든 손쉽게 Excel 열 제목으로 변환할 수 있습니다.