C
以下のように数字を逆にするプログラムを探しています。
私が入力した場合:
123456
結果は次のようになります。
654321
私を助けてください。
この複雑な問題に対する簡単な解決策を次に示します。
#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);
}
}
教授があなたのパフォーマンスを評価している場合は、別の質問でこの問題に対する 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;
}
どうしても、このナノ秒でやらないといけない。
% 10
最後の桁を取得するために使用します。出力します。数値を 10 で割り、最後の桁以外をすべて取得します。% 10
その最後の桁を取得するために使用します。というように、数字が 0 になるまで。
別の可能性があります。これは再帰的ではなく、おそらくコードが少し少なくなります。コードコメントには、ロジックを説明する例があります。
/*
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;
}
で char 配列内の数値を読み取り、からまでの各文字を出力することにより、 char 配列を反転して出力A
します。scanf("%s", A)
fgets
strlen(A) - 1
0
strrev 関数は文字列を反転します。パフォーマンスが問題にならない場合は、たとえば、itoa、strrev、atoi の順に実行できます。しかし、タスクは strrev がなくても非常に単純です。