2016-11-20 35 views
0

嗨我想在C中編寫代碼來找到超過2個數字的GCD。但是,當我編譯並運行代碼時,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];主函數內部的第二個語句,它有意義嗎?你正在變量g中分配一個垃圾值。 –

回答

2

您設置g等於A[0]設置A[0]任何特定的值之前。

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; 
}