2016-11-20 3 views
0

Привет Я пытаюсь написать код на C, чтобы найти GCD для более чем двух чисел. Однако, когда я компилирую и запускаю код, GCD всегда равен 0. Пойми, если кто-нибудь сможет помочь. Спасибо.Поиск GCD с использованием массивов в C

#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. Вам необходимо объявить A с элементами n после того, как вы прочитали количество элементов n. Вы должны написать g после ", в последних printf.

Это, как я думаю, что ваш главный должен выглядеть следующим образом:

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; 
} 
Смежные вопросы