Напишите функцию, вычисляющую НОД двух целых чисел - 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.
- Выводится сообщение
Naibil
shiy spilniy dil
nik - i`, где i — найденный НОД. - Значение i сбрасывается на 0.
- Цикл завершается. Код работает верно, но есть одна особенность — если a и b равны 0, то цикл будет выполняться бесконечно, так как при проверке условия a%i==0 и b%i==0, оба значения всегда будут равны 0. Поэтому перед началом цикла необходимо проверить, что a и b не равны 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д