Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
 Аватар для IP_TCP
7 / 6 / 2
Регистрация: 19.08.2018
Сообщений: 108

Перегрузка оператора *(умножения)

08.04.2019, 04:20. Показов 1928. Ответов 3

Студворк — интернет-сервис помощи студентам
Здрасти.
Подскжите, плиз, а то у меня соображлки не хватает для перегрузки оператора *(умножения), используя следующую логику(ниже) или какую-нибудь еще проще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// операция сложения; Hugelnt + Hugelnt
HugeInt HugeInt::operator+(const HugeInt &op2) const
{
    HugeInt temp;
    int carry = 0;
    for (int i = 29; i >= 0; i--)
    {
        temp.integer[i] = integer[i] + op2.integer[i] + carry;
        if (temp.integer[i] > 9)
        {
            temp.integer[i] %= 10;      // редуцировать к 0-9
            carry = 1;
        }
        else
        {
            carry = 0;
        }
    }
    return temp;
}
Кликните здесь для просмотра всего текста

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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
class HugeInt
{
private:
    short integer[30];
 
    friend std::ostream &operator<<(std::ostream &, const HugeInt &);
 
public:
    HugeInt(long = 0); //конструктор преобразования/по умолчанию
    HugeInt(const char *);  //конструктор преобразования
    HugeInt(const HugeInt &);   //constr copy
    ~HugeInt();
 
    HugeInt operator+(const HugeInt &) const; //addition HugeInt + HugeInt
    HugeInt operator+(int) const; //addition HugeInt + int
    // операция сложения;
    // Hugelnt + строка, представляющая большое целое значение
    HugeInt operator+(const char *) const; 
    HugeInt operator*(const HugeInt &);
 
#include "stdafx.h"
#include "HugeInt.h"
 
//constructor
HugeInt::HugeInt(long value)
{
    // инициализировать массив нулем
    for (int i = 0; i <= 29; i++)
    {
        integer[i] = 0;
    }
 
    // поместить в массив цифры аргумента
    for (int j = 29; value != 0 && j >= 0; j--)
    {
        integer[j] = value % 10;
        value /= 10;
    }
}
 
// конструктор преобразования символьной строки,
// представляюще большое целое, в объект Hugelnt
HugeInt::HugeInt(const char *string)
{
    // инициализировать массив нулем
    for (int i = 0; i <= 29; i++)
    {
        integer[i] = 0;
    }
 
    // поместить в массив цифры аргумента
    int length = std::strlen(string);
    int k;
 
 
    for (int j = 30 - length; k = 0, j <= 29; j++, k++)
    {
        if (std::isdigit(string[k]))
        {
            integer[j] = string[k] - '0';
        }
    }
}
 
//constr copy
HugeInt::HugeInt(const HugeInt &_hugeIntCopy)   
{
    // инициализировать массив нулем
    for (int i = 0; i <= 29; i++)
    {
        integer[i] = 0;
    }
 
    for (int i = 0; i <= 29; i++)
    {
        integer[i] = _hugeIntCopy.integer[i];
    }
}
 
//destr
HugeInt::~HugeInt()
{}
 
// операция сложения; Hugelnt + Hugelnt
HugeInt HugeInt::operator+(const HugeInt &op2) const
{
    HugeInt temp;
    int carry = 0;
    for (int i = 29; i >= 0; i--)
    {
        temp.integer[i] = integer[i] + op2.integer[i] + carry;
        if (temp.integer[i] > 9)
        {
            temp.integer[i] %= 10;      // редуцировать к 0-9
            carry = 1;
        }
        else
        {
            carry = 0;
        }
    }
    return temp;
}
 
// операция сложения; HugeInt + int
HugeInt HugeInt::operator+(int op2) const
{
    // преобразовать ор2 в Hugelnt, затем вызвать
    // operator+ для двух объектов Hugelnt
    return *this + HugeInt(op2);
}
 
// Hugelnt + строка, представляющая большое целое значение
HugeInt HugeInt::operator+(const char *op2) const
{
    // преобразовать op2 в Hugelnt, затем вызвать
    // operatoг+ для двух объектов Hugelnt
    return *this + HugeInt(op2);
}
 
??????????
HugeInt HugeInt::operator*(const HugeInt &op2)
{
    HugeInt temp;
    int carry = 0;
    for (int i = 29; i >= 0; i--)
    {
        temp.integer[i] = integer[i] * op2.integer[i] + carry;
        if (temp.integer[i] > 9)
        {           
            temp.integer[i] %= 10;      // редуцировать к 0-9
        }
        else
        {
            carry = 0;
        }
    }
    return temp;
}
 
//overload <<
std::ostream & operator<<(std::ostream &output, const HugeInt &num)
{
    int i;
    for ( i = 0; (num.integer[i] == 0) && (i <= 29); i++)
    {
        ;
    }
    if (i == 30)
    {
        output << 0;
    }
    else
    {
        for (; i <= 29; i++)
            output << num.integer[i];
    }
    return output;
}

Не могу понять, как средуцировать при умножении.
Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.04.2019, 04:20
Ответы с готовыми решениями:

Перегрузка оператора умножения
Доброго времени суток, прошу помощи с перегрузкой оператора *. Есть задача, где необходимо создать шаблон класса, в котором можно...

Перегрузка оператора умножения
Здравствуйте. Пишу реализацию действий с матрицами. Возникла проблема. Вот перегрузка умножения для матрицы на число: Matrix...

Перегрузка оператора умножения
здесь пытаюсь сделать перегрузку оператора умножения, какое значение оператор должен возвращать? И правильно ли я вообще делаю? Я ещё...

3
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,243
08.04.2019, 07:48
C++
1
2
3
4
5
if (temp.integer[i] > 9)
        {           
            temp.integer[i-1]+=temp.integer[i] / 10; 
            temp.integer[i] %= 10;      // редуцировать к 0-9
        }
0
 Аватар для IP_TCP
7 / 6 / 2
Регистрация: 19.08.2018
Сообщений: 108
08.04.2019, 08:06  [ТС]
zss, когда перемножаю 11 * 11 выдаёт 11. Не редуцирует)
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,243
08.04.2019, 09:42
Цитата Сообщение от IP_TCP Посмотреть сообщение
Не редуцирует
Редуцирует, это ТС забыл сделать второй цикл.
Внешний должен перемещаться по цифрам второго числа, а внутренний - по цифрам первого.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.04.2019, 09:42
Помогаю со студенческими работами здесь

Перегрузка оператора умножения
есть клас квадрат (поля 4 точки). Перегрузить знак * для перемещения квадрата. Как именно, ума не приложу. Получилось что-то типа: ...

Перегрузка оператора умножения для матрицы
Помогите пожалуйста, не получается перегрузить умножение матриц как произведение элемента на элемент матриц. Класс создавался для работы...

Перегрузка оператора умножения числа на матрицу
Доброго дня суток. Хочу перегрузить оператор умножение числа на матрицу. Перегрузил сначала в классе вот так: matrix operator*(const...

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

Перегрузка оператора* для умножения матрицы на число
Имеем перегрузку оператора для умножения матрицы на число. Matrix operator* (int p) { Matrix res(n,m); res.reset(); for...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru