Найти НОД для одномерного массива, используя алгоритм Евклида - C (СИ)
Формулировка задачи:
Вопрос в том как найти НОД для одномерного массива, используя алгоритм Евклида?
Решение задачи: «Найти НОД для одномерного массива, используя алгоритм Евклида»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
inline int GCD(int __1, int __2)
{
__1 = abs(__1);
__2 = abs(__2);
int buf;
if(__1 == 0 && __2 == 0)
return 1;
if(__1 == 0)
return __2;
if(__2 == 0)
return __1;
while(__2)
{
buf = __1 % __2; __1 = __2; __2 = buf;
}
return __1;
}
int main(void)
{
int arr_size, i, result = 0, tmp;
printf("Array size: ");
if(scanf("%d", &arr_size) != 1)
{
printf("Incorrect input!\n");
return -1;
}
for(i = 0; i < arr_size; i++)
{
printf("arr[%d]=", i);
if(scanf("%d", &tmp) != 1)
{
printf("Incorrect input!\n");
return -1;
}
if(!result)
result = tmp;
else
result = GCD(result, tmp);
}
printf("GCD = %d\n", result);
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Определяется функция GCD, которая принимает два целых числа и возвращает их НОД
- В функции main считывается размер массива и инициализируется переменная result значением 0
- Для каждого элемента массива считывается его значение и обновляется переменная result, если текущий элемент является первым ненулевым числом
- Если ввод некорректен, выводится сообщение об ошибке и возвращается -1
- Выводится сообщение о нахождении НОД и его значение