Десятичное представление в BASE-26
Я написал код для преобразования десятичного числа в соответствующее алфавитное представление.
Примеры:
1: A
2: B
.
.
.
26: Z
27: AA
.
.
.
703: AAA
Вот мой подход:
void print(int n)
{
if( n > 0 )
{
n--;
print( n / 26 );
printf( "%c", ( n % 26 ) + 'A' );
}
}
Приведенный выше код работает правильно. Могу ли я оптимизировать его с точки зрения читабельности?
Каков наилучший способ сделать это?
Теперь я хочу изменить приведенный выше код для работы следующим образом:
0: A
1: B
.
.
.
25: Z
26: AA
.
.
.
702: AAA
Очевидный подход заключается в добавлении 1 к десятичному входному числу и передаче его функции в исходном коде. Как я могу изменить первую программу, чтобы она работала во втором случае, не добавляя 1?
1 ответ
Решение
После некоторых наблюдений я попробовал приведенный ниже код и он работает для Case: 2
,
void print(int n)
{
if(n < 26)
printf("%c", n + 'A');
else
{
print(n / 26 - 1);
print(n % 26);
}
}
Смотрите вывод здесь.