Напишите функцию, вычисляющую НОД двух целых чисел - C (СИ)
Формулировка задачи:
Напишите функцию на языке Си, вычисляющую НОД двух целых чисел
Вот в принципе Тесты: 7 3:1 24 48:24 98 18:2
Проблема состоит в том если вести 24 и 48 чтоб он выводил только один ответ. Как это сделать?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{
int a,b,c,n,i;
printf("vvedite 2 chisla cherez probel\n");
scanf("%d%d",&a,&b);
if ((a>b)&&(b==0)) {printf("net resheniya\n"); system("pause");return 1;}
if ((a<b) &&(a==0)) {printf("net resheniya\n"); system("pause");return 1;}
if ((a==0) &&(b==0)) {printf("net resheniya\n"); system("pause");return 1;}
if (a<b)
{c=a;
a=b;
b=c;
n=a;}
else
{
n=b;}
for (i=n; i>0; i--)
{
if (a%i==0)
if (b%i==0)
printf(" otvet %d\n",i);}
system("pause");
return 0;
}Решение задачи: «Напишите функцию, вычисляющую НОД двух целых чисел»
textual
Листинг программы
for (i=n; i>0; i--)
{
if (a%i==0 && b%i==0){ printf("Naibil`shiy spil`niy dil`nik - %d\n",i); break;}
}
Объяснение кода листинга программы
В данном коде реализована функция, которая находит НОД (наибольший общий делитель) двух целых чисел a и b.
- Переменная i инициализируется значением n.
- Цикл for выполняется, пока i больше 0.
- Внутри цикла проверяется, делится ли a и b на i без остатка. Если да, то i является НОДом и цикл прерывается командой break.
- Выводится сообщение
Naibilshiy spilniy dilnik - i`, где i — найденный НОД. - Значение i сбрасывается на 0.
- Цикл завершается. Код работает верно, но есть одна особенность — если a и b равны 0, то цикл будет выполняться бесконечно, так как при проверке условия a%i==0 и b%i==0, оба значения всегда будут равны 0. Поэтому перед началом цикла необходимо проверить, что a и b не равны 0.