-5

最小数の変数 (2 未満では作成できませんでした) と最小行数も使用して、階乗演算で可能な限り短いスニペットをコーディングしたかったのです。しかし、ロジックは適切で正しいと思いますが、機能していません:/

ここにあります: 5 の階乗と言います。

#include<stdio.h>

main()   
int x, i = 5;
{
     while(i!=1)
     {
         i--;
         x *= i;
     }

     printf("%d",x); 
}

それでは、そのコードが何をするかを説明しましょう。

ループ内でi4 にx = 5 * 4なると、これで 20 になります。

次のラウンドiは 3 です。

x = 20 * 3

次のラウンドiは2

x = 60 * 2 

nextiは 1 x = 120 * 1なので、階乗です。

半行で難読化されたコードを思いつくことができる優秀な頭脳がそこにいることは知っていますが、なぜエラーが発生するのかを知るだけで満足します.

人々の入力後に更新:

i!=2 を変更しても、常に 0 になります。

     main()
     {
        int x, i = 5;
        while(i!=1)
       {
         i--;
         x *= i;
       }

    printf("%d",x);


   }

最終的な解決策と説明:

私は PHP と Java でコードを書いていますが、今日は C で簡単にやりたかったので、これを書いたとき:

int x、i = 5;

PHP や JAVA のように、両方とも 5 に初期化されるのは当然だと思っていましたが、そうではありません!

だから、私がするなら

 #include<stdio.h>

main()   
int x = 5;
int i = 5;
{
     while(i!=1)
     {
         i--;
         x *= i;
     }

     printf("%d",x); 
     return (0);
}

私のコードは動作します。

基本的な構文エラーを指摘してくれたすべての人に感謝します。

構文エラーは、言語規則に精通していない場合に発生しますが、最も重要なのはコードのロジックであり、それは正しかったです。

4

7 に答える 7

2

可能な限り短いコードを探している場合は、変数を必要としない分析ソリューションを次に示します。いかなる種類のループや再帰も使用しません。

long int fac(unsigned long int n) {
    return lround(exp(lgamma(n+1)));
}

これを機能させるには、含める必要があることに注意してくださいmath.h

于 2013-03-13T08:33:31.997 に答える
1
int x, i = 5;

上記の行は、 main 内の{. あなたの場合、それは と の間に来main()ます{

于 2013-03-13T08:00:12.390 に答える