Форум программистов, компьютерный форум CyberForum.ru

НОД - C++

Восстановить пароль Регистрация
 
Leff
0 / 0 / 0
Регистрация: 15.11.2010
Сообщений: 23
26.01.2011, 01:58     НОД #1
Извиняюсь за вопрос, просмотрел все но не нашел того, что нужно

Задание: Найти НОД 2 чисел

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# include <iostream>
# include <conio.h>
using namespace std;
int main(){
    int a,b,i;
cout<< "vvedite 2 4isla";
cin>>a;
cin>>b;
while (a%i!=0)||(b%i!=0){
 
    i=a<b?a:b;
    i--;}
cout<<"max="<< i;
return 0;
}
Что я неправильно написал ? Она даже не запускается...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.01.2011, 10:14     НОД #2
Leff,
Цитата Сообщение от Leff Посмотреть сообщение
Что я неправильно написал ? Она даже не запускается...
Вы неправильно написали вот что:

Цитата Сообщение от Leff Посмотреть сообщение
while (a%i!=0)||(b%i!=0){// значение i не определено и еще оба условия нужно брать в круглые скобки
К тому же Вы здесь пытаетесь использовать два алгоритма в одном. Лучше использовать какой-нибудь один алгоритм, например так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# include <iostream>
# include <conio.h>
using namespace std;
int main(){
int a,b,i;
cout<< "vvedite 2 4isla";
cin>>a;
cin>>b;
i=a;
while ((a%i!=0)||(b%i!=0)){
i--;}
cout<<"max="<< i;
return 0;
}
Но есть еще более оптимальный по времени алгоритм.
no0ker
100 / 87 / 4
Регистрация: 17.12.2010
Сообщений: 416
26.01.2011, 16:01     НОД #3
не знаю почему, но мне этот алгоритм показался каким то чУдным =)
C
1
2
while ((a%i!=0)||(b%i!=0)){
i--;}
а мой первый реализованный алгоритм был вообще ужас.
раскладывал каждое из чисел на простые множители. и коэфициенты при них.
потом собирал результат как произведение простых множителей с бОльшими коэфициентами при них. =)
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.01.2011, 16:08     НОД #4
Цитата Сообщение от no0ker Посмотреть сообщение
не знаю почему, но мне этот алгоритм показался каким то чУдным =)
Вообще-то этот алгоритм читался в Вашем коде.
Вот нормальный алгоритм:
C
1
2
3
4
5
6
7
8
9
int NOD(int a, int b)
{
    while(a>0 && b>0) 
        if(a>b)
            a%=b; 
        else
            b%=a; 
    return a+b;
}
Yandex
Объявления
26.01.2011, 16:08     НОД
Ответ Создать тему
Опции темы

Текущее время: 10:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru