PHP: как вывести список следующим образом: AA, AB, AC, вплоть до ZZZY, ZZZZ, ZZZZA и т. Д.

Я пытаюсь написать функцию, которая преобразует целое число в такую ​​строку, но я не могу понять логику … 🙁

1 = a 5 = e 27 = aa 28 = ab etc... 

Может ли кто-нибудь помочь? Я действительно удивлен тем, что не могу окунуться в голову, как написать это … 🙁

Длинный список из них здесь :

 /* * Convert an integer to a string of uppercase letters (AZ, AA-ZZ, AAA-ZZZ, etc.) */ function num2alpha($n) { for($r = ""; $n >= 0; $n = intval($n / 26) - 1) $r = chr($n%26 + 0x41) . $r; return $r; } /* * Convert a string of uppercase letters to an integer. */ function alpha2num($a) { $l = strlen($a); $n = 0; for($i = 0; $i < $l; $i++) $n = $n*26 + ord($a[$i]) - 0x40; return $n-1; } 

Я добавлю этот ответ, чтобы суммировать комментарии относительно злоупотребления базой 26.

Обычная первая реакция, когда сталкивается с этой проблемой, состоит в том, чтобы подумать: «Есть 26 букв, поэтому это должно быть base-26! Все, что мне нужно сделать, это сопоставить каждую букву с соответствующим номером» .

Но это не база-26. Легко понять, почему: нет нуля!

В базе 26 число двадцать шесть – это первое число с двумя цифрами и написано «10». В этой системе подсчета двадцать шесть имеют одну цифру «Z», а первое двузначное число – двадцать семь.

Но что, если мы сделаем А = 0, …, Z = 25? Таким образом, мы имеем нуль, а первое двузначное число становится двадцать шесть. Все идет нормально. Как мы теперь пишем двадцать шесть? Это «АА». Но … не А = 0? По электронной почте Ой! A = AA = AAA = "0" = "00" = "000".

Вам нужно будет использовать base_convert для преобразования чисел в базу 26:

 base_convert(35, 10, 26); 

Это дает вам отдельные компоненты в числах от 1 - p , поэтому 35 становится 19 (1 * 26 + 9). Затем вам нужно сопоставить отдельные компоненты с вашим желаемым набором, поэтому 1 => a, 9 => i, a => j и т. Д., И 19 станет ai .

Ну, вы в значительной степени переходите от базы 10 к основанию 26. База 10 имеет цифры 0-9, тогда как база 26 может быть выражена цифрами «AZ». Преобразование из базы 10 легко – см. Например: http://www.mathsisfun.com/base-conversion-method.html Редактирование: на самом деле, base-26 не учитывает несколько эквивалентных способов записи 0 (0 = 00 = 000).

 void convert(int number) { string str = ""; while(number) { char ch; ch = (number - 1) % 26 + 65; str = ch + str; number = (number-1) / 26; } cout << str << endl; } в void convert(int number) { string str = ""; while(number) { char ch; ch = (number - 1) % 26 + 65; str = ch + str; number = (number-1) / 26; } cout << str << endl; }