0

基本的に、単語を入力してから数字を入力します。プログラムは各文字を受け取り、ASCII でステップを進めます。元。"hello" と数字の 1 は "ifmmp" を返します。ここで、文字の ASCII 値と数字を組み合わせた値より大きい数字を入力すると、az ではない文字が得られます。それをazに保つために、whileループを作成しました。私の質問は次のとおりです。

~5000 の値を入力すると、5000 回ループせずにこれを実行できますか?

(word、number、answer、x は先に宣言されています)

int countNumber = word[x];
int countComplete = word[x];    

if(word[x] + number > 122){
    while(countNumber != number) {
        if(countComplete == 122){
            countComplete = 97;
            countNumber++;
        }
        else{
            countNumber++;
            countComplete++;
        }
    }
    answer[x] = countComplete;
    x++;
}
else{
    answer[x] = word[x] + number;
    x++;
}
4

4 に答える 4

2

ああ、私の。

まず、重要な数値は 0..25 だけです。それ以外は、アルファベット全体を余分にループするだけです。したがって、number を number%26 に置き換えることから始めます。

しかし、これはループを完全に排除できることを示唆しています。問題の ASCII コードが 0..25 の場合、ASCII コード x を (x+number)%26 に置き換えるだけです。代わりに、a の ASCII コードを減算して x をその範囲にマップし、前述の計算を実行してから、そのコードを追加し直します。

于 2013-11-12T21:17:02.570 に答える
0

ループを使用して各値を 1 ずつインクリメントするのは、あなたが望むものではありません...単一の累積の後に単一のラップアラウンドが続きます (ラップアラウンドが必要な場合)。

最初に行うことは、大きな数を、同じ結果が得られる最小の数に減らすことです。ラップアラウンド前の値は 26 個しかないため、単純に設定number = number % 26;するか、より一般的には、number = number % (1 + 'z' - 'a');

次に、蓄積を行います。answer[x] = word[x] + number;

最後にラップアラウンドを処理します。if ([answer[x] > 'z') answer[x] = answer[x] + 'a' - 'z';

于 2013-11-12T21:16:48.413 に答える