Матч
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');
}
};