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

Класс "длинные числа"

07.01.2015, 16:00. Показов 2505. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно создать класс длинных чисел с конструкторами, перегрузками операций и прочее.
Само число вводится при помощи строки, которая затем преобразуется в массив.
Беда в том, что я не знаю, как это реализовать, помогите пожалуйста.
Вот что есть, возможно пользы в этом мало)
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
//Вводятся длинные целые числа. Найти их сумму.
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <assert.h>
#include<iomanip>
#include<ctime>
#define BASE 10000
#define BASE_DIG 4
 
using namespace std;
 
//Абстрактный класс
class AllBigInt
{
    virtual int input(int ss)=0;
    virtual void output()=0;
    //virtual long Sum() {;}
};
 
class BigInt: public AllBigInt
{
private:
    int s; // s – текущая длина
    string m; //строка для ввода длинного числа
    long *a; // Массив коэффициентов
public:
    BigInt(int ss); //Конструктор по умолчанию
    BigInt(BigInt &A); //Конструктор копирования
    ~BigInt(); //Деструктор
    int input(int ss); //ввод
    void output(); //вывод
    BigInt operator+(BigInt &A); //сумма длинных чисел
    BigInt& operator=(BigInt A); //Перегрузка операции присваивания
};
 
//Конструктор по умолчанию
BigInt::BigInt(int ss) 
{
    s = ss;
    a = new long[s+1];
    for(int i=0;i<=s;i++)
        a[i]=0;
}
 
//Конструктор копирования
BigInt::BigInt(BigInt &A) 
{
    s = A.s; 
    a = new long[s+1];
    for(int i=0; i<=s; i++) 
        a[i] = A.a[i];
}
 
//Деструктор
BigInt::~BigInt() 
{
    delete []a;
}
 
//Перегрузка операции присваивания
BigInt& BigInt::operator=(BigInt A) 
{
    if (s > A.s)
    {
        for(int i=A.s;i<=s;i++)
            a[i]=0;
    }
    s=A.s;
    for(int i=0;i<=s;i++)
        a[i]=A.a[i];
    return *this;
 
}
 
//ввод чисел
int BigInt::input(int ss)
{
    delete []a;
    s=ss;
    a = new long[s+1];
    cout<<"Введите цифры длинного числа"<<endl;
    for(int i=1;i<=ss;i++)
    {
        cout<<"a["<<i<<"]=";
        cin>>a[i];
    }
    return 0;
}
 
//вывод чисел
void BigInt::output()
{
    int n;
    n=s;
    while(a[n]==0 && n>=0)
        n=n-1;
    if(n<0)
        cout<<"Длинное число равно 0"<<endl;
    else
    {
    for (int  i=n; i>0; i--)
            cout<<a[i];
    }
    cout << endl;
    return;
}
 
void main()
{
    setlocale(LC_ALL,"Russian");
    int i;
    int s;
    s=1;
    BigInt a(s),b(a),d(s);
    cout<<"Введите кол-во цифр для первого числа = ";
    cin>>s;
    a.input(s);
    cout<<"Первое длинное число = ";
    a.output();
    cout<<"Введите кол-во цифр для второго числа = ";
    cin>>s;
    b.input(s);
    cout<<"Второе длинное число = ";
    b.output();
 
    system("pause");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.01.2015, 16:00
Ответы с готовыми решениями:

Реализовать длинные целые числа в виде класс
здравствуйте,только начала изучение классов,помогите с решением задачи:нужно реализовать длинные...

Класс "Длинные числа" с перегрузкой операторов
только-только начал изучение классов, задание написать класс длинных чисел с перегрузкой операторов...

Проверить, являются ли числа длинные числа m и n взаимно простыми
Составить программу проверки, являются ли числа длинные числа m и n взаимно простыми. #include...

Числа с плавающей точкой. Длинные числа
Напишите функцию, выполняющую действие: А!*В!*С!. В качестве тестового примера примените: А =...

3
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
07.01.2015, 16:30 2
сам писал или копипаста откуда-нибудь? хочется узнать понимаешь ли ты что здесь написано.
0
0 / 0 / 0
Регистрация: 14.01.2014
Сообщений: 53
07.01.2015, 17:20  [ТС] 3
ya_noob, все, что написано - написано самостоятельно
0
_
317 / 151 / 27
Регистрация: 08.10.2011
Сообщений: 432
07.01.2015, 17:45 4
значит можно покритиковать код
1. убери весь вывод из элемент-функций, это не часть класса, а интерфейс программы и должен находиться отдельно.
2. строки 41, 50 и может еще где: зачем s+1 ? такая логика запутывает, разрядов получается не s а s+1.
3. функция со строки 62: если s < A.s, то строки 69 не достаточно, массив то не увеличился, получится выход за пределы массива при копировании. логику ф-ции надо упростить: всегда удалять старый массив и создавать новый. + вначале сделать проверку на присваивание объекта самому себе.
4. строка 83: как и писал выше уменьши размер массива на 1 и бегай по массиву от 0 до s-1, это же тебе не паскаль
5. ну раз сам всё это написал, то думаю не составит труда дописать реализацию operator+ или может еще чего-то надо?
0
07.01.2015, 17:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.01.2015, 17:45
Помогаю со студенческими работами здесь

Длинные числа в c++
Делаю прогу, которая работает с длинными числами, хранятся такие числа у меня в классе, в массиве,...

Длинные числа в С++
Я так понемаю самое большое число long long тоесть до милиарда???? а если больше!...

Длинные числа С++
Напишите функцию, выполняющую действие: А!*В!*С!. В качестве тестового примера примените: А =...

Длинные целые числа
Подскажите пожалуйста как разработать поле типа : длинные целые числа ?

Длинные числа, 3 в 100 степени
Не получается написать такую так как консоль не поддерживает такое количество цифр.

Длинные числа. Умножение отрицательных
Здравствуйте, помогите пожалуйста как сделать, чтобы и отрицательные числа перемножались? ...

C++ длинные отрицательные числа в коде
Откуда взялись эти числа П.5.18.Правил Запрещено размещать задания и решения в виде картинок и...


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

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