2016-11-20 10 views
0

こんにちは私は2つ以上の数字のGCDを見つけるためにCでコードを書こうとしています。しかし、コンパイルしてコードを実行すると、GCDは常に0になります。ありがとうございました。Cで配列を使ってGCDを見つける

#include <stdio.h> 

static int gcd(int x, int y) 
{ 
    int r; 
    if (x <= 0 || y <= 0) 
    return 0; 

    while ((r = x % y) != 0) 
    { 
     x = y; 
     y = r; 
    } 
    return y; 
} 

int main (void) 
{ 
    int A[5]; 
    int g = A[0]; 
    int i; 
    int n; 

    printf ("How many elements are there? \n") 
    scanf ("%d", &n); 

    printf ("Input the elements. \n"); 

    for (i = 0; i < n; i++) 
    { 
     scanf ("%d", &A[i]); 
    } 

    for (i = 1; i < n; i++) 
    g = gcd(g, A[i]); 

    printf ("GCD is: %d \n"); 

return 0; 
} 
+0

これは、私はあなたのメインのようになるはずだと思う方法です。どんな助けが必要ですか?ロギングを追加しようとしましたか?あなたはデバッガを使ってみましたか?あなたは何をつかまえましたか? –

+0

int g = A [0];メイン関数の中の2番目のステートメント、それは理にかなっていますか?変数gにガベージ値を代入しています。 –

答えて

2

あなたが任意の特定の値にA[0]を設定する前に、あなたはA[0]に等しいgを設定します。

0

printfの後に;が必要です。 nの数を読み取った後、An要素と宣言する必要があります。 最後にprintf",の後にgと書かなければなりません。あなたが質問をするのを忘れて

int main (void) 
{ 
    int i; 
    int n; 

    printf ("How many elements are there? \n"); 
    scanf ("%d", &n); 
    int A[n]; 

    printf ("Input the elements. \n"); 
    for (i = 0; i < n; i++) 
    { 
     scanf ("%d", &A[i]); 
    } 

    int g = A[0]; 
    for (i = 1; i < n; i++) 
     g = gcd(g, A[i]); 

    printf ("GCD is: %d", g); 

    return 0; 
} 
関連する問題