Найти НОД нескольких целых чисел - C (СИ)
Формулировка задачи:
Необходимо найти НОД n целых чисел ki, где i=1..n.
Всем привет помогите написать программу.сПАСИБО
Решение задачи: «Найти НОД нескольких целых чисел»
textual
Листинг программы
#include <stdio.h> int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); } int gcd_nth (int * ptr, int n, int result) { return n == 0 ? result : gcd_nth(ptr + 1, n - 1, gcd(result, *ptr)); } int main (void) { int a[] = {12, 6, 15, 18}; int b[] = {27, 18, 9}; printf("%i\n", gcd_nth(a + 1, 3, a[0])); printf("%i\n", gcd_nth(b + 1, 2, b[0])); return 0; }
Объяснение кода листинга программы
- Включаем стандартную библиотеку ввода-вывода
- Определяем функцию gcd(a, b), которая находит НОД двух целых чисел
- Используем рекурсию для нахождения НОД двух чисел
- Если b равно 0, то возвращаем a, иначе вызываем функцию gcd для чисел b и a mod b
- Определяем функцию gcd_nth(ptr, n, result), которая находит НОД первого n чисел в массиве ptr и сохраняет результат в переменной result
- Если n равно 0, то возвращаем result, иначе вызываем функцию gcd_nth для ptr + 1, n - 1 и результата gcd(result, *ptr)
- В функции main создаем два массива a и b и инициализируем их значениями 12, 6, 15, 18 и 27, 18, 9 соответственно
- Вызываем функцию gcd_nth(a + 1, 3, a[0]) и выводим результат на экран
- Вызываем функцию gcd_nth(b + 1, 2, b[0]) и выводим результат на экран
- Возвращаем 0, завершая работу программы