Матч 261, Колонка таблицы (SpreadsheetColumn)

Дивизион 2, Уровень 1

 

Многие таблицы для нумерации строк используют натуральные числа, а для нумерации колонок – строки из букв. В задаче колонки могут иметь метки из одной или двух букв латинского алфавита верхнего регистра: A, B, …, Z, AA, AB, …, ZY, ZZ. В задаче следует по номеру колонки найти ее метку.

 

Класс: SpreadsheetColumn

Метод: string getLabel(int column)

Ограничения: 1 £ column £ 702.

 

Вход. Номер колонки column.

 

Выход. Метка колонки в виде строки букв латинского алфавита верхнего регистра.

 

Пример входа

column

1

27

702

 

Пример выхода

A

AA

ZZ

 

 

РЕШЕНИЕ

обработка строк

 

Если column < 27, то метка колонки состоит из одной буквы, ASCII код которой равен column – 1 + 'A'.  Иначе вычтем из column число 27 (чтобы нулю соответствовал код “AA”) и найдем первую и вторую буквы метки. Они соответственно равны column / 26 + 'A' и column % 26 + 'A'.

 

ПРОГРАММА

 

#include <cstdio>

#include <vector>

#include <string>

using namespace std;

 

class SpreadsheetColumn

{

  public:

  string getLabel(int column)

  {

    if (column <= 26) return string(1,column - 1 + 'A');

    column -= 27;

    return string(1,column/26 + 'A') + string(1,column%26 + 'A');

  }

};