1

C以下のように数字を逆にするプログラムを探しています。

私が入力した場合:

123456

結果は次のようになります。

654321

私を助けてください。

4

8 に答える 8

11

この複雑な問題に対する簡単な解決策を次に示します。

#include <stdio.h>

int main()
{
    int ch;
    ch = getchar();
    if (ch != '\n') {
        main();
        printf("%c", ch);
    }
}


改行を出力する新しいバージョン:

#include <stdio.h>
#include <stdlib.h>

static void newline(void)
{
    printf("\n");
}

int main()
{
    int ch;
    ch = getchar();
    if (ch != '\n') {
        main();
        printf("%c", ch);
    } else {
        atexit(newline);
    }
}
于 2010-02-28T14:14:14.563 に答える
7

教授があなたのパフォーマンスを評価している場合は、別の質問でこの問題に対する ggf31416 の解決策を試してください。

int FastReverse(int num) {
    int res = 0;
    int q = (int)((214748365L * num) >> 31);
    int rm = num - 10 * q;
    num = q;
    if (rm == 0) return -1;
    res = res * 10 + rm;
    while (num > 0) {
       q = (int)((214748365L * num) >> 31);
       rm = num - 10 * q;
       num = q;
       res = res * 10 + rm;
    }
    return res;
}

最適化®

どうしても、このナノ秒でやらないといけない。

于 2010-02-28T14:30:16.023 に答える
5

% 10最後の桁を取得するために使用します。出力します。数値を 10 で割り、最後の桁以外をすべて取得します。% 10その最後の桁を取得するために使用します。というように、数字が 0 になるまで。

于 2010-02-28T14:08:13.423 に答える
2

別の可能性があります。これは再帰的ではなく、おそらくコードが少し少なくなります。コードコメントには、ロジックを説明する例があります。

/*
    Example: input = 12345

    The following table shows the value of input and x
    at the end of iteration i (not in code) of while-loop.
    ----------------------
    i   |   input  |    x
    ----------------------
    0       12345       0
    1        1234       5
    2         123      54
    3          12     543
    4           1    5432
    5           0   54321
    ----------------------
*/
uint32_t
reverseIntegerDigits( uint32_t input )
{
    uint32_t x = 0;

    while( input )
    {
        x = 10 * x + ( input % 10 );
        input = input / 10;
    }

    return x;
}
于 2010-02-28T17:57:35.287 に答える
1

で char 配列内の数値を読み取り、からまでの各文字を出力することにより、 char 配列を反転して出力Aします。scanf("%s", A)fgetsstrlen(A) - 10

于 2010-02-28T14:14:29.493 に答える
0

strrev 関数は文字列を反転します。パフォーマンスが問題にならない場合は、たとえば、itoa、strrev、atoi の順に実行できます。しかし、タスクは strrev がなくても非常に単純です。

于 2010-02-28T14:15:37.683 に答える