в случае нахождения NOK выводит 0, что не так?
using namespace std;
int main() {
long a, b, NOD, NOK;
cout << "enter a: ";
cin >> a;
cout << "enter b: ";
cin >> b;
while (a != 0 && b != 0) {
if (a > b)
a = a - b;
else
b = b - a;
}
NOD = a + b;
NOK = (a * b) / NOD;
cout << "NOD of numbers: " << NOD << endl;
cout << "NOK of numbers: " << NOK << endl;
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Да хотя бы потому, что из цикла вы выходите когда? Когда либо a, либо b становится равным 0. Т.е. a*b равно 0.
Все понятно?
Только вот так считать НОД (кстати, по-английски НОД и НОК — GCD и LCM) как минимум страшно неэффективно (не считая того, что эти функции уже есть в стандартной библиотеке)...
long gcd(T m, T n)
{
while(m && n) if (m < n) n %= m; else m %= n;
return m + n;
}
long lcm(T m, T n)
{
return (m/gcd(m,n))*n;
}
Так куда эффективнее. И обратите внимание, что у меня НОК вычисляется как
(m/gcd(m,n))*n
в то время как у вас
(m*n)/gcd(m,n)
В чем разница и почему лучше так, как у меня — подумайте сами.