Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Извини Delirium, уже дело принципа
Спасибо sergvg, что проверил код. Я что-то расслабился совсем. Я исхожу из принципа, что эта буквенная система представляет собой искажённую 26-чную систему исчисления, но со старшим разрядом из 27 символов. Таким образом, в 4-значное число максимально может иметь значение 27*26*26*26 - 1. (Это не противоречит тому, что 27-разрядное с неиспользуемыми нулями, но меняет логику поиска алгоритма) Протестировал, вроде сходится
Код: Выделить весь код
string rc2a1(int my_str_number)
{
   string str;
   int a=my_str_number;
   // здесь исправил перепутанное местами деление и остаток,
   // добавил компенсацию старшего разряда при делении 27*26*26*26 = (26 + 1)*26*26*26
   // и вызов констуктора string исправил.
   for(; 26<=a; str=string(1, 'A' + (a%26))+str, a=(a/26)-1) {}
   return string(1, 'A' + a)+str;
}
Немного переделав цикл и собрав одинаковые действия в одно, получаем:
Код: Выделить весь код
string rc2a1(unsigned a)
{
   string str;
   do { 
      str=string(1, 'A' + (a%26))+str;
      a=(a/26)-1;
   } while (a!=-1); 
   return str;

Последний раз редактировалось pva, 28-07-2009 в 07:51.

Это сообщение посчитали полезным следующие участники:

Отправлено: 07:37, 28-07-2009 | #9