2017-01-17 2 views
-5

各文字にアルファベットの位置に対応する番号が割り当てられます。 'など、「C」が2であり、「B」は1であり、0である整数を与えられた単語を再帰的に解読するには?

すべての文字一文字ワードのエンコーディングは、その数である場合

低いです。

単語の最初のn-1文字のエンコーディングがxで、n番目の文字のエンコーディングがmの場合、n文字の単語のエンコーディングはx * 26 + mです。私はロジックがこのことを理解

:言葉は、単一の文字が含まれている場合

は、エンコードは、単語が2つの文字が含まれている場合は、firstletterを取る

0〜25です。* 26 + secondletter

単語は3つの文字が含まれている場合は、(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

お試しください。 Stack Overflowは、コード作成サービスではなく、Q&Aサイトです。効果的な質問を書く方法を学ぶには、[こちらをご覧ください](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 

は今、あなたは数を持っており、xとMを計算する式を有します。それについてどうやって行くの?

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

だからあなたのコードは次のようになります。あなたは、出力内の文字の正しい順序を持つようにprint_letter前print_word呼び出す必要があります

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); 
    } 
} 

注意。

関連する問題