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

класс LongLong - C++

Восстановить пароль Регистрация
 
BREAK350
1 / 1 / 0
Регистрация: 08.07.2012
Сообщений: 23
16.09.2012, 16:53     класс LongLong #1
Оригинал
Створити клас LongLong для роботи з цілими числами з 64 біт. Число повинно бути представлене двома полями: long – старша частина, unsigned long – молодша частина. Повинні бути реалізовані арифметичні операції, які присутні в C++ (без присвоювання), та порівняння. Как сделать умножения? кое что я уже сделал:

Создать класс LongLong для работы с целыми числами 64 бит. Число должно быть представлено двумя полями: long - старшая часть, unsigned long - младшая часть. Должны быть реализованы арифметические операции, которые присутствуют в C++ (без присваивания), и сравнения. Как сделать умножение? кое что я уже сделал:

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
//---------------------------------------------------------------------------
#pragma hdrstop
#pragma argsused
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#define LONG_MAX 0xffffffffffffffff
#define MSI 0xffff
#define MI 0xffffffff
#define nBit 8
//---------------------------------------------------------------------------
class LongLong
{
    private:
        long s;
        unsigned long m;
        LongLong Create(unsigned char,unsigned char);
    public:
        void Init(signed char,unsigned char);
        int ToInt();
        void Show();
        LongLong operator + (LongLong);
        template <class t> LongLong operator + (t);
        LongLong operator - (LongLong);
        template <class t> LongLong operator - (t);
        LongLong operator * (LongLong);
        template <class t> LongLong operator * (t);
};
//---------------------------------------------------------------------------
void LongLong::Show()
{
    printf("(%d;%d) = %d\n",s,m,ToInt());
}
//---------------------------------------------------------------------------
int LongLong::ToInt()
{
    return ((s<<nBit)+m);
}
//---------------------------------------------------------------------------
void LongLong::Init(long _s,unsigned long _m)
{
    s=_s;
    m=_m;
    if(s<0)
    {
        m=-m;
        s--;
    }
}
//---------------------------------------------------------------------------
LongLong LongLong::operator + (LongLong _L)
{
    LongLong L;
    L.s=s+_L.s;
    L.m=m+_L.m;
    if( L.m<=m || L.m<=_L.m )
    {
        L.s++;
    }
    return L;
}
//---------------------------------------------------------------------------
template <class t> LongLong LongLong::operator + (t p)
{
    LongLong L;
    L.s=s;
    L.m=m+p;
    if( L.m<m || L.m<p )
    {
        L.s++;
    }
    return L;
}
//---------------------------------------------------------------------------
LongLong LongLong::operator - (LongLong _L)
{
    LongLong L;
    L.s=s-_L.s;
    L.m=m-_L.m;
    if( m<L.m )
    {
        L.s--;
    }
    return L;
}
//---------------------------------------------------------------------------
template <class t> LongLong LongLong::operator - (t p)
{
    LongLong L;
    L.s=s;
    L.m=m-p;
    if( m<L.m )
    {
        L.s--;
    }
    return L;
}
//---------------------------------------------------------------------------
LongLong LongLong::Create(unsigned long a,unsigned long b)
{
    LongLong L;
    L.m=a*b;
   /* if ( a * b >= (1<<8) )
    {
        us toRet = (a*b) / (1<<8);
        c = a*b - toRet * (1<<8);
        return toRet;
    }
    else
    {
        c = a * b;
        return 0;
    }*/
}
//---------------------------------------------------------------------------
LongLong LongLong::operator * (LongLong _L)
{
 
}
//---------------------------------------------------------------------------
template <class t> LongLong operator * (t p)
{
 
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
    return 0;
}
//---------------------------------------------------------------------------
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2012, 16:53     класс LongLong
Посмотрите здесь:

Классы, Длинная арифметика, LongLong C++
15. Создать класс LongLong для работы с целыми числами. Число должно быть представлено двумя полями.Реализовать арифметические операции C++
Как преобразовать указатель на класс к указателю на асбтрактный класс? C++
C++ С++ класс (создайте класс с именем Complex для выполнения в арифмитических операий с комплексными числами))
Реализовать класс Triangle (задание 25), опираясь на класс Angle из задания 26 для представления углов C++
C++ Класс Quadrangle (четырехугольник). Класс хранит Декартовы координаты четырех углов четырехугольника
C++ Область видимости. один класс не видит другой класс
Подробно прокомментировать класс PolarCoordinates, представляющий собой класс координат точки на плоскости C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KeyGen
 Аватар для KeyGen
333 / 289 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
16.09.2012, 17:22     класс LongLong #2
Вот может пригодиться. Пишу класс big_int. Класс не дописал. Застрял в делении...
Yandex
Объявления
16.09.2012, 17:22     класс LongLong
Ответ Создать тему
Опции темы

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