Найти наибольший общий делитель трех чисел - C (СИ)
Формулировка задачи:
Даны два натуральных числа A и B. Требуется найти их наибольший общий делитель (НОД).
Входные данные
Во входном файле INPUT.TXT в единственной строке записаны натуральные числа A и B через пробел (A, B ≤ 109).
Выходные данные
В выходной файл OUTPUT.TXT выведите НОД чисел А и В.
Задача не проходит тест на компиляцию: Compilation error, помогите найти почему.
#include <stdio.h>
int main()
{
long a,b;
FILE *fin, *fout;
fin=fopen("input.txt","r");
fout=fopen("output.txt","w");
fscanf(fin, "%ld %ld",&a, &b);
while ((a*b)>0){
if (a>=b)
a = a % b;
else
b = b % a;
}
fprintf(fout, "%ld",a+b);
fclose(fin);
fclose(fout);
return 0;
}Решение задачи: «Найти наибольший общий делитель трех чисел»
textual
Листинг программы
#include <stdio.h>
int a,b;
int main(){
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
scanf ("%i %i",&a,&b);
while(b) b^=a^=b^=a%=b;
printf("%i",a);
return 0;
}
Объяснение кода листинга программы
В этом коде на языке C выполняется следующая последовательность действий:
- Открывается файл
input.txtдля чтения данных с помощью функцииfreopen(). - Открывается файл
output.txtдля записи результата с помощью функцииfreopen(). - С помощью функции
scanf()вводятся два числа a и b. - Используется цикл
whileдля нахождения наибольшего общего делителя (НОД) двух чисел. - В каждой итерации цикла выполняется операция XOR между a и b, затем результат присваивается переменной b.
- Результат НОД сохраняется в переменной a.
- Наконец, результат выводится на экран с помощью функции
printf()и программа возвращает 0, указывая на успешное выполнение.