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

Программа с НОК - C++

Восстановить пароль Регистрация
 
Петренко
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 11
23.10.2012, 23:17     Программа с НОК #1
Задача:
Даны две сцепленные шестеренки. У одной шестеренки N зубцов, у другой K. Требу-
ется найти, какое минимальное число поворотов на один зубчик требуется сделать, чтобы
шестеренки вернулись в исходное состояние.
Входная информация содержит два целых числа N и K.
В выходную информацию выведите искомое количество зубчиков.

Есть еще условие о размере чисел (не более миллиона на вход и не более миллиарда на выход), но проверку я пока опустил.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Шестеренки.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <conio.h>
 
long int a;
long int b;
int NOD(long int a, long int b)
{
    while (b != 0)
    {
        int r = a % b;
        a = b;
        b = r;
    }
 
    return a;
} 
int NOK(long int a,long int b)
    {
        return (a * b) / NOD(a, b);
    }
 
long int res;
int main()
{
    printf("Vvedite kilo4estvo zybchikov dvuh shesterenok (ne bolee 10^6)");
    scanf("%I %I", &a, &b);
        res = NOK(a, b);
        printf("Kol-vo zubchikov, na kotorie nuzhno sdelat' povorot ravno %I", res);
    getch();
    return 0;
}
Суть в том, что переменная res судя по всему не считается (то есть все числа запрашивает, без ошибок, но на выходе вместо числа пишет I). В чем моя ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2012, 23:17     Программа с НОК
Посмотрите здесь:

C++ Найти НОК
C++ НОК
НОК и НОД C++
НОК C++
нахождение НОК C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
24.10.2012, 00:16     Программа с НОК #2
1й вопрос зачем вам такие огромные переменные типа long int? когда подойдут и интовские, 2е

Цитата Сообщение от Петренко Посмотреть сообщение
povorot ravno %I", res);
до сих пор не знаете что за пристовутое I? =)
%d сделайте

Добавлено через 3 минуты
хотя да на счет long int я погорячился конечно когда по ляму вводишь переполнение, тогда такой вопрос зачем вам iostream если вы им не пользуетесь? ну и делайте считывание через cin и вывод через cout и будет все корректно выводится

Добавлено через 7 минут
даже если все нормально считалось бы на выходе при а и б 10^6 былобы -727
я бы вам посоветовал использовать числа еще больше =) типа long long так называемые int64

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
long long a;
long long b;
long long NOD(long long a, long long b)
{
    while (b != 0)
    {
        long long r = a % b;
        a = b;
        b = r;
    }
    return a;
} 
long long NOK(long long a,long long b)
    {
        return (a * b) / NOD(a, b);
    }
int main()
{
    cout<<"Vvedite kilo4estvo zybchikov dvuh shesterenok (ne bolee 10^6)";
    cin>>a>>b;
    cout<<"Kol-vo zubchikov, na kotorie nuzhno sdelat' povorot ravno "<<NOK(a, b);
    getch();
    return 0;
}
Добавлено через 7 минут

Не по теме:

если сильно хотите по извращаться то можно использовать тип unsigned long long там в 2 раза больше положительных чисел чем в long long =) у меня на выходе получилось число с 17 нулями =D

Петренко
0 / 0 / 0
Регистрация: 03.05.2009
Сообщений: 11
24.10.2012, 15:31  [ТС]     Программа с НОК #3
Цитата Сообщение от MrGrig Посмотреть сообщение
1й вопрос зачем вам такие огромные переменные типа long int? когда подойдут и интовские, 2е


до сих пор не знаете что за пристовутое I? =)
%d сделайте

Добавлено через 3 минуты
хотя да на счет long int я погорячился конечно когда по ляму вводишь переполнение, тогда такой вопрос зачем вам iostream если вы им не пользуетесь? ну и делайте считывание через cin и вывод через cout и будет все корректно выводится

Добавлено через 7 минут
даже если все нормально считалось бы на выходе при а и б 10^6 былобы -727
я бы вам посоветовал использовать числа еще больше =) типа long long так называемые int64

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
long long a;
long long b;
long long NOD(long long a, long long b)
{
    while (b != 0)
    {
        long long r = a % b;
        a = b;
        b = r;
    }
    return a;
} 
long long NOK(long long a,long long b)
    {
        return (a * b) / NOD(a, b);
    }
int main()
{
    cout<<"Vvedite kilo4estvo zybchikov dvuh shesterenok (ne bolee 10^6)";
    cin>>a>>b;
    cout<<"Kol-vo zubchikov, na kotorie nuzhno sdelat' povorot ravno "<<NOK(a, b);
    getch();
    return 0;
}


Добавлено через 7 минут

Не по теме:

если сильно хотите по извращаться то можно использовать тип unsigned long long там в 2 раза больше положительных чисел чем в long long =) у меня на выходе получилось число с 17 нулями =D

Очень благодарен за помощь, но еще пришлось добавить
C++
1
2
3
using std::cout;        
using std::cin;         
using std::endl;
Я пробовал без iostream, ничего не работает

Добавлено через 10 минут
Окончательный вариант, который включает в себя все условия. Может кому пригодится.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "stdafx.h"
#include <iostream> 
#include <conio.h>
using std::cout;        
using std::cin;         
using std::endl; 
 
long long a;
long long b;
long long NOD(long long a, long long b)
{
    while (b != 0)
    {
        long long r = a % b;
        a = b;
        b = r;
    }
    return a;
} 
long long NOK(long long a,long long b)
    {
        return (a * b) / NOD(a, b);
    }
int main()
{
loop:
    cout<<"Vvedite kilo4estvo zybchikov dvuh shesterenok (ne bolee 10^6)\n";
    cin>>a>>b;
    if (a>1000000 || a<0 || b>1000000 || b<0)
    {
        cout<<"\n------------------------\nNedopustimoe zna4enie, povtorite vvod\n------------------------\n";
        goto loop;
    }
    else
    cout<<"Kol-vo zubchikov, na kotorie nuzhno sdelat' povorot ravno "<<NOK(a, b);
    getch();
    return 0;
}
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
25.10.2012, 10:22     Программа с НОК #4
Цитата Сообщение от Петренко Посмотреть сообщение
Очень благодарен за помощь, но еще пришлось добавить
C++
1
2
3
using std::cout; * * * *
using std::cin; * * * * 
using std::endl;
C++
1
using namespace std;
решит ваши проблемы =)
Yandex
Объявления
25.10.2012, 10:22     Программа с НОК
Ответ Создать тему
Опции темы

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