2017-01-17 15 views
-5

Каждой букве присваивается номер, соответствующий его положению в алфавите. «А» 0 «В» 1, «с» 2 и т.д.Как рекурсивно декодировать слово с целым числом?

Все буквы в нижнем регистре

, кодирующий один непристойность является его номер.

Если кодировка для первых n-1 букв слова равна x, а кодировка для n-й буквы - m, тогда кодирование n-буквенного слова равно x * 26 + m.

Я понимаю, что логика такова:

Если слово содержит только одну букву, кодирование между 0 и 25.

Если слово содержит две буквы, а затем взять firstletter * 26 + secondletter

Если слово содержит три буквы, затем (firstletter * 26 + secondletter) * 26 + thirdletter

и так далее, пока вы не кодируются целиком.

Я не уверен, как пройти мимо базового футляра. Пожалуйста помоги!

Это то, что я до сих пор:

char print_letter(unsigned int number) 
{ 
    char c = number + 97; 
    if (number <= 25) 
    { 
     printf("%c\n", c); 
     return(c); 
    } 
    else 
    { 
     fprintf(stderr, "ERROR: print_letter: Received " 
      "input %d,", number); 
     fprintf(stderr, " between 0 and 25 expected."); 
     return('-'); 
    } 
} 

void print_word(unsigned int number) 
{ 
    if(number <= 25) 
     print_letter(number); 
    else 
    { 
     print_letter((number/26) % 26); 
     print_word(number/26); 
    } 
} 
+1

Пожалуйста, покажите нам, что вы пробовали. Переполнение стека - это вопрос и ответ, а не служба написания кода. Пожалуйста, [см. Здесь] (http://stackoverflow.com/help/how-to-ask), чтобы узнать, как писать эффективные вопросы. –

+1

http://meta.stackoverflow.com/questions/334822/how-do-i- ask-and-answer-homework-questions – NineBerry

+0

Измените свой вопрос, чтобы включить код как текст, а не как изображение. – Kevin

ответ

0

У вас есть формула

number = x*26+m 

Теперь у вас есть номер и хочет вычислить й и т. Как это сделать?

m = number % 26 
x = (number - m)/26 

Так что ваш код должен выглядеть следующим образом:

void print_word(unsigned int number) 
{ 
    if(number <= 25) 
     print_letter(number); 
    else 
    { 
     int m = number % 26; 
     int x = (number - m)/26; 

     print_word(x); 
     print_letter(m); 
    } 
} 

Обратите внимание, что вы должны вызвать print_word перед тем print_letter иметь правильный порядок букв в выходном сигнале.