Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 14.10.2022
Сообщений: 15
1

НОД длинная арифметика

01.12.2022, 10:34. Показов 783. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача: составить программу для нахождения наибольшего общего делителя для трех длинных чисел (всё делается через массив и базовой арифметике). Что на данный момент сделал: перевод длинного числа из строки в массив, присвоил общую длину для всех трех чисел, чтобы был адекватный вывод, сравнение, какое число больше. Сам алгоритм нахождения НОД я не представляю как реализовать, может есть какие-то мысли у вас?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2022, 10:34
Ответы с готовыми решениями:

Длинная арифметика
Очень важный аспект в программировании - длинная и быстрая арифметика. Собственно в этой теме я...

Длинная арифметика
:senor: Здраствуйте, пишу модуль длинной математики. В принципе, работоспособность у него...

Длинная арифметика
Алгоритмы всех операций в принципе уже готовы (длина числа ограничивается только ресурсами ПК)....

Длинная арифметика
Программка уже почти готова, единственное неправильно находит остаток при делении По заданию:...

9
328 / 219 / 108
Регистрация: 12.02.2019
Сообщений: 1,055
01.12.2022, 11:11 2
Цитата Сообщение от amorqw Посмотреть сообщение
всех трех чисел
и какие это числа?
0
573 / 475 / 99
Регистрация: 05.08.2022
Сообщений: 2,598
01.12.2022, 11:45 3
Цитата Сообщение от amorqw Посмотреть сообщение
Сам алгоритм нахождения НОД я не представляю как реализовать,
блин, вам гугл на что даден?? он круглосуточно работает
даже в библиотеку идти не требуется
https://track24.ru/google/?q=%... 0%BB%D1%8F
1
0 / 0 / 0
Регистрация: 14.10.2022
Сообщений: 15
01.12.2022, 12:33  [ТС] 4
CoderPC, не понял сути вашего вопроса.
KSergey9, Гуглю уже второй день, всё равно идей нет
0
573 / 475 / 99
Регистрация: 05.08.2022
Сообщений: 2,598
01.12.2022, 12:43 5
Цитата Сообщение от amorqw Посмотреть сообщение
Гуглю уже второй день, всё равно идей нет
Какие идеи??
там готовые алгоритмы и даже программы
каких идей у вас нет?
1
0 / 0 / 0
Регистрация: 14.10.2022
Сообщений: 15
01.12.2022, 12:52  [ТС] 6
Цитата Сообщение от KSergey9 Посмотреть сообщение
Какие идеи??
там готовые алгоритмы и даже программы
каких идей у вас нет?
Вижу, что вы не настроены спокойно вести диалог. Я не знаю как реализовать ни один алгоритм нахождения НОД в длинной арифметике, ну просто не знаю и не понимаю. Я же не прошу что-то сверхъестественного, если вам понятен этот алгоритм, то могли бы просто поделиться мыслью, а не отправлять в гугл. Я понимаю алгоритм нахождения НОД для обычных чисел, но не в длинной арифметике
0
573 / 475 / 99
Регистрация: 05.08.2022
Сообщений: 2,598
01.12.2022, 12:58 7
Цитата Сообщение от amorqw Посмотреть сообщение
Вижу, что вы не настроены спокойно вести диалог
Вы крупно ошибаетесь.
Со своей стороны хочу заметить, что, на мой взгляд, это вы не желаете решить возникшую у вас задачу, потрудившись сколь-нибудь подробно описать в чем именно у вас проблема. Пока выглядит как истерика "помогите, не знаю куды бечь!". Зачем бечь? почему бечь? Очевидно же, что это требуется уточнить.

Цитата Сообщение от amorqw Посмотреть сообщение
алгоритм нахождения НОД в длинной арифметике
Так вот в чем беда! как реализовать операции в длинной арифметике? ну так реализуйте отдельные операции: сравнение, сложение (вычитание), из них потом и скомбинируйте алгоритм.
В чем на этом этапе теперь у вас возникает сложность? (я верю что она может возникать, это не страшно, но требуется таки уточнить в чем именно, телепаты в отпуске)

И да, хорошо бы привести какие-то примеры вашего кода (или полностью), потому как со слов угадывать что у вас там за массивы и т.п. - "ну такое", как это модно говорить ныне.
А без этого сколь-нибудь предметно что-то подсказать крайне затруднительно.
0
0 / 0 / 0
Регистрация: 14.10.2022
Сообщений: 15
01.12.2022, 13:07  [ТС] 8
Дальше реализации вычитания я ничего придумать не могу. Пока поторопился с вводом 3 длинного числа, потому что сохраняю результат вычитания в него и для упрощения себе жизни пока что сравниваю два числа.
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <iostream>
using namespace std;
 
void stringmas(string s , int *m) {
    int i, j;
    for (i = 0, j = s.length() - 1; i < s.length(), j >= 0; i++, j--) {
        m[i] = s[j] - 48;
    }
}
void show(int *m,int n) {
    int i = n - 1;
    while (m[i] == 0) i--;
    for (; i >= 0; i--)
        cout << m[i];
}
void zero_mas(int* m, int n) {
    for (int i = 0; i < n; i++) {
        m[i] = 0;
    }
}
int maximum(int* x, int len_x, int* y)
{
    int k = 3;
    for (int i = len_x - 1; i >= 0; i--)
    {
        if (x[i] > y[i])
        {
            k = 1;
            break;
        }
        if (x[i] < y[i])
        {
            k = 2;
            break;
        }
    }
    return k;
}
void difference(int* x, int len_x, int* y, int len_y, int* z, int& len_z)
{
    int* xc = new int[len_x];
    for (int i = 0; i < len_x; i++)
        xc[i] = x[i];
 
    for (int i = 0; i < len_x; i++)
    {
 
        if (i < (len_x - 1))
        {
            xc[i + 1]--;
            z[i] += 10 + xc[i];
        }
        else
            z[i] += xc[i];
        z[i] -= y[i];
        if (z[i] / 10 > 0)
        {
            z[i + 1]++;
            z[i] %= 10;
        }
    }
}
 
int main() {
    setlocale(LC_ALL, "RUS");
    string str1, str2, str3,str4;
    cout << "Введите первое число" << endl;
    cin >> str1;
    cout << "Введите второе число" << endl;
    cin >> str2;
    cout << "Введите третье число" << endl;
    cin >> str3;
    cout << endl;
 
    int *a, *b, *c,n,n1,n2,n3,n4;
    n1 = str1.length();
    n2 = str2.length();
    n3 = str3.length();
    n4 = max(n1, n2);
    n = max(n4, n3);
 
    a = new int[n];
    b = new int[n];
    c = new int[n];
    zero_mas(a, n);
    zero_mas(b, n);
    zero_mas(c, n);
 
    stringmas(str1, a);
    stringmas(str2, b);
    stringmas(str3, c);
 
    zero_mas(c, n);
 
    if (maximum(a, n, b) == 1)
    {
        difference(a, n, b, n, c, n);
        show(a, n);  cout << " - "; show(b, n);  cout << " = "; show(c, n); cout << endl;
    }
    else if (maximum(a, n, b) == 2)
    {
        difference(b, n, a, n, c, n);
        show(b, n);  cout << " - "; show(a, n);  cout << " = "; show(c, n); cout << endl;
    }
    else { show(a, n);  cout << " - "; show(b, n);  cout << " = 0"; cout << endl; }
    
}
0
573 / 475 / 99
Регистрация: 05.08.2022
Сообщений: 2,598
01.12.2022, 13:13 9
Цитата Сообщение от amorqw Посмотреть сообщение
Дальше реализации вычитания я ничего придумать не могу.
Прикольно, когда пост не содержит вопроса. Очевидно, на этом ветку можно закрывать, т.к. вопросов не осталось?

Ок, задам встречный: какую именно требуемую элементарную операцию вы не можете реализовать?
(впрочем, я уже, оказывается, задавал это вопрос; ответа нет - ну ок; я не настроен на диалог, ага)
0
0 / 0 / 0
Регистрация: 14.10.2022
Сообщений: 15
01.12.2022, 13:29  [ТС] 10
Цитата Сообщение от KSergey9 Посмотреть сообщение
какую именно требуемую элементарную операцию вы не можете реализовать
Вроде бы все элементарные операции я реализовал, я сейчас сам запутался, если в голову придет хороший ответ, то отвечу. Спасибо. За лишнюю грубость прощу прощения
0
01.12.2022, 13:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.12.2022, 13:29
Помогаю со студенческими работами здесь

Длинная арифметика
Ребята,объясните как решить задачу , напишите хоть часть кода. Пусть даны числа a , b . Найти...

Длинная арифметика
Как сделать очень-очень оптимальный вариант по памяти и времени , для нахождения факториала 3000?...

Длинная арифметика
http://www.********/index.asp?main=task&amp;id_task=103 Как решить эту задачу? С помощью чего, и в...

Длинная арифметика
Здравствуйте. Помогите разобраться с тем, что происходит в коде. #include &lt;iostream&gt; #include...

Длинная арифметика
Строка состоит из целых чисел, принимающих значения от 0 до 10^9, разделенных знаками операций “+”,...

Длинная арифметика
Как сделать типы длинных чисел, например, знаковое 256-ти битное целое и 256-ти битное вещественное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru