Здесь я пытаюсь найти наименьшее общее кратное для массива чисел. Я использовал следующую формулу, чтобы найти значение, использующее наибольший общий делитель для определения НОК.
Моя программа вычисляет GCD правильно, но когда дело доходит до определения LCM с использованием GCD, она дает неверное значение LCM. Что может быть не так в моей логике. Любая помощь приветствуется.
#include <stdio.h>
int main() {
int arr[10] = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
int GCD = findGCD(arr[0], arr[1]);
int LCM = (arr[0] * arr[1]) / GCD;
int i;
for (i = 2; i < sizeof(arr) / sizeof(arr[0]); i++) {
int temp = GCD;
GCD = findGCD(temp, arr[i]);
LCM = (temp * arr[i]) / GCD;
}
printf("GCD IS %d AND LCM IS %d", GCD, LCM);
}
int findGCD(int num1, int num2) {
if (num2 == 0) {
return num1;
}
if (num1 % num2 == 0) {
return num2;
}
return findGCD(num2, num1 % num2);
}
int arr[10]={49,21,7,14,28,42,35,49,56,70,64};
должно бытьint arr[11]={49,21,7,14,28,42,35,49,56,70,64};
- person Marek Klein   schedule 24.10.2016(temp*arr[i])/GCD
может переполняться, когда эквивалент(temp/GCD)*arr[i])
- нет. - person chux - Reinstate Monica   schedule 24.10.2016