Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
5 / 5 / 2
Регистрация: 14.06.2014
Сообщений: 201

Создать класс длинных целых чисел

10.09.2015, 10:22. Показов 5584. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создать класс длинных целых чисел. Класс имеет конструктор по умолчанию, конструктор - преобразующий long в объект класса. Определить оператор преобразования объекта типа длинных целых чисел в число типа long. Создать класс целых чисел. Определить взаимное преобразование с классом длинных целых чисел.
P>S Благодарности!

Добавлено через 18 часов 31 минуту
Тема актуальна!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.09.2015, 10:22
Ответы с готовыми решениями:

Помогите отладить программу: Разработать класс, содержащий вектор длинных целых чисел
Всем привет. Нужна ваша помощь. Ниже задания что бы вы были в курсе что я делаю. Примерно половину заданий я уже выполнил, однако есть кое...

Класс: Создать класс дробь - рациональных чисел, являющихся отношением двух целых чисел...
Создать класс дробь - рациональных чисел, является отношением двух целых чисел. Определить необходимые методы, конструкторы, деструкторы....

Класс "Массив длинных целых чисел"
1. Создать класс, содержащий динамический массив конечного размера. Тип массива - Массив длинных целых чисел. Класс должен содержать...

21
 Аватар для icpu
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
10.09.2015, 11:20
Бери и делай класс. В качестве базового элемента бери unsigned int, храни его в любом векторе, при операциях используй unsigned long long. Знак храни отдельно. Подходя к делению, прихвати чего-нить холодного. Это если коротко. А если подлиннее, то во фриланс проше.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
10.09.2015, 13:52
cybersoft, так ведь такие задачи классически решаются с использованием строк.
Считай, что строка из цифр может быть очень большим числом.
0
5 / 5 / 2
Регистрация: 14.06.2014
Сообщений: 201
10.09.2015, 13:55  [ТС]
icpu, а можете мне помочь, кодик написать по этой задачке?
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
10.09.2015, 14:00
cybersoft, ну эт строк на 150 выйдет, может больше
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
10.09.2015, 14:02
Цитата Сообщение от cybersoft Посмотреть сообщение
кодик
т.е. "пару" сотен строк - это кодик для Вас? Здесь посмотрите.
0
5 / 5 / 2
Регистрация: 14.06.2014
Сообщений: 201
10.09.2015, 14:04  [ТС]
Ferrari F1, и вот как препод дает такие задания на 2ом курсе обычно не дают сложные и максимум же до 50 строк должно быть.

Добавлено через 1 минуту
Kerry_Jr, ну вы преувеличиваете, я образно сказал кодик но на самом деле мне нужен код, так как я в этом тексте без 100 грамма не разберу и в с++ не настолько умен.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
10.09.2015, 14:06
Цитата Сообщение от cybersoft Посмотреть сообщение
препод дает такие задания на 2ом курсе
Странно, у меня дак такое задание было в качестве зачета по 1-ому триместру 1-ого курса
0
5 / 5 / 2
Регистрация: 14.06.2014
Сообщений: 201
10.09.2015, 14:08  [ТС]
Ferrari F1, ну вот так, это смотря ещё в каком универе преподы, и уровень преподавания. Бывают ещё отбитые, но вы тут будете говорить что мол бери учебник и учись самостоятельно, это я заранее вам тут пишу, что просто нет необходимого времени на это. Поэтому прошу помощи у Вас господа.
0
10.09.2015, 14:09

Не по теме:

Цитата Сообщение от cybersoft Посмотреть сообщение
на 2ом курсе ... до 50 строк должно быть.
Серьезно? А весь первый курс "Hello world!" разбирать?

0
5 / 5 / 2
Регистрация: 14.06.2014
Сообщений: 201
10.09.2015, 14:09  [ТС]
Kerry_Jr, серьёзно, hello world, вы правы.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
10.09.2015, 14:12
cybersoft, в книге Лафоре по ООП (которую можно легко найти и скачать) со страницы 613 описывается этапы создания класса сверхбольших чисел (вместо с кодом).
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
10.09.2015, 14:14
Книга "C++. Сборник рецептов" глава 11.20 "Представление больших чисел фиксированного размера", там как раз класс длинных целых чисел
0
5 / 5 / 2
Регистрация: 14.06.2014
Сообщений: 201
10.09.2015, 14:15  [ТС]
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
cybersoft, в книге Лафоре по ООП (которую можно легко найти и скачать) со страницы 613 описывается этапы создания класса сверхбольших чисел.
Я ж сказал не настолько умен, чтобы я мог взять и открыть и прочитать и потом 1-2 часа подумать написать 100 строк на эту задачу. Рассчитываю на тех кто сможет помочь и не пройдет мимо. Без обид, парень.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
10.09.2015, 14:18
cybersoft, дак я к тому, что там уже код написан, автор сам его написал и откомментировал.
0
10.09.2015, 14:23

Не по теме:

Цитата Сообщение от cybersoft Посмотреть сообщение
Я ж сказал не настолько умен, чтобы я мог взять и открыть и прочитать и
переписать? Вы уж, конечно, извините, но это уже хамство какое-то. Я Вам дал ссылку на тему на этом форуме, где написан код, Croessmah и Ferrari F1 дали ссылки на книги, откуда можно переписать код, а Вы все ждете, что Вам код преподнесут на блюдечке с голубой/золотой/любой другой каемочкой?

0
10.09.2015, 14:24

Не по теме:

Цитата Сообщение от Kerry_Jr Посмотреть сообщение
откуда можно переписать код
не студенческое это дело - списывать, пусть тогда сам решает :D

0
5 / 5 / 2
Регистрация: 14.06.2014
Сообщений: 201
10.09.2015, 14:39  [ТС]
Croessmah, Kerry_Jr, Ferrari F1, ребята не горячитесь, спокуха!
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
#ifndef BIGINT_H
#define BIGINT_H
#define BASE 10000    //основание СС(в элементах массива храним четырехзначные числа)
#define BASE_DIG 4    //размер основания
#define MAX_L 10      //максимальное количесвто четырехзначных цифр
 
#include <iostream>
#include <stdio.h>
 
const AnsiString NUM = "0123456789";
 
int DivRes(int dig, int size){  //если остаток от деления есть то возвращает 1, в противном случае 0
    if (size%dig==0){
        return o;
    } else return 1;
};
 
class BigInt {
public:
  int Size;             // Size - текущая длина (истинная длинна числа)
  int SizeMax;        // SizeMax - максимальная длина
  int *Coef;           // Массив коэффициентов (массив где храним наши четырехзнаяные числа)
 
  BigInt();                           //Объявление вида BigInt A, конструктор по умолчанию
  BigInt::BigInt(char *A)        //Объявление вида BigInt А("1234567")
  BigInt(const BigInt &A);       //Объявление вида BigInt А(1234567), конструктор копирования
  ~BigInt();                         //Деструктор
 
  BigInt& operator=(const BigInt &A);   // Оператор присваивания
 
};
 
BigInt::BigInt()                 // Объявление вида BigInt A, конструктор по умолчанию
{
  SizeMax = MAX_L;
  Size = 0;
  Coef = new int[SizeMax];
 
};
 
BigInt::BigInt(char *A)      //объявление вида BigInt А("1234567")
{
  SizeMax = MAX_L;
  Coef = new int[SizeMax];
  int n = 0;   //храним задействование количесвто элементов массива
 
  AnsiString ch, str ="";    //ch - тут храним текущий символ, str - тут храним число
 
  //проверяем, чтобы все введенные знаки были цифрами, и заносим его в переменную str
  for (int i=1; i<A.Length(); i++)
  {
      ch = "";
      ch += A[i];
      if(StrPos(NUM.c_str(),ch.c_str())){
          n=++;
          str+=ch;
      }
  }
 
  //дополняем 0-ями незаполненные доконца разряды
  ch="";
  while(DivRes(BASE_DIG,str.Length()!=0)){
      ch = str;
      str = "";
      str = "0" + ch;
  }
  ch = "";
 
  int sz = str/Length() / BASE_DIG;  // текущая длина нашего числа
 
  //теперь вводим число в массив coef
  for (int i = 1; i<+ sz; i++){
      Coef[i-1]=StrToln(str.SubString(str.Length() - 4*i, 4));  //тут также можно использовать функцию atoi()
  }
 
  Size = sz;
 
};
 
BigInt::BigInt(const BigInt &A);            //Конструктор копирования, объявление вида BigInt А(1234567)
{
    SizeMax = A.SizeMax;
    Size = A.Size;
    Coef = new int[SizeMax];
    for (int i=0; i<SizeMax; i++) Coef[i] = A.Coef[i];
};
 
BigInt::~BigInt()                                //Деструктор
{
    delete Coef;
 
};
 
BigInt& BigInt::operator=(const BigInt &A)   // Оператор присваивания
                         {
    const int*a = A.Coef;
 
    if(this == &A) return *this;   // Если присваивание вида А=А, то выйти
    if(SizeMax < A.Size) {         // Если размера не хвататет - переинициализация
        if(Coef) delete Coef;
        Coef = new int[A.Size];
        SizeMax = A.Size;
} else Size = A.Size;
for (int l=0; l < Size; l++) Coef[l] = a[l];
 
return *this;
};
 
 
#endif // BIGINT_H
оно, верно да?

Добавлено через 12 минут
Ferrari F1, и кстати то что в книге, я посмотрел но кажется это не то что мне нужно, не идет речь даже о моей задачки.
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
10.09.2015, 15:59
Лучший ответ Сообщение было отмечено cybersoft как решение

Решение

cybersoft, cделал, но только для работы с unsigned long, если нужно учитывать знак, допиши класс сам или попроси другого.
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
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
class BigInt
{
    char digits[1000];
    unsigned short length;
public:
    BigInt() : length(1)
    {
        digits[0] = '0', digits[1] = '\0';
    }
 
    BigInt(unsigned long longValue)
    {
        for (length = 0; longValue; longValue /= 10)
            digits[length++] = (longValue % 10) + '0';
        digits[length] = '\0';
    }
 
    operator unsigned long() const
    {
        unsigned long sum(0);
        for (short i(length), temp; i--;)
            if (sum * 10 + (temp = digits[i] - '0') <= LONG_MAX)
                sum = sum * 10 + temp;
            else
                return sum;
        return sum;
    }
 
    void show(void) const
    {
        for (short i(length); i--;)
            cout << digits[i];
    }
};
 
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    BigInt x, y; // инициализация нулями
    x = LONG_MAX; // создание rvalue объекта через конструктор, принимающий тип unsigned long
    (y = x + 1).show(); // преобразование x в unsigned long, создание rvalue объекта и вывод объекта y
    cout << '\n' << y; // преобразование объекта в тип unsigned long
    cout << endl;
    system("pause");
    return 0;
}
1
5 / 5 / 2
Регистрация: 14.06.2014
Сообщений: 201
10.09.2015, 16:11  [ТС]
Ferrari F1,
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
cybersoft, cделал, но только для работы с unsigned long, если нужно учитывать знак, допиши класс сам или попроси другого.
Ну если, в условии задачи не требуется учитывать знак, то значит не надо. Данный код соответствует той описанной задачи выше? Я бы сейчас проверил, просмотрел да нет, возможности, на работе. Только я не понял что это, что оно делает:
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
operator unsigned long() const
* * {
* * * * unsigned long sum(0);
* * * * for (short i(length), temp; i--;)
* * * * * * if (sum * 10 + (temp = digits[i] - '0') <= LONG_MAX)
* * * * * * * * sum = sum * 10 + temp;
* * * * * * else
* * * * * * * * return sum;
* * * * return sum;
* * }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.09.2015, 16:11
Помогаю со студенческими работами здесь

Создать класс СПИСОК целых чисел. Разработать класс СТЕК
&quot;Создать класс СПИСОК целых чисел. Разработать класс СТЕК, который вмещает объект класса СПИСОК. Определить необходимые конструкторы,...

Создать класс целых чисел
Помогите решить пожалуйста)) :) Создать класс целых чисел. Определить оператор ++ как функцию-член и -- как дружественную функцию и...

Создать класс целых чисел Integer
Создать класс целых чисел Integer. Определить перегруженную функцию, возвращающую максимальное из двух аргументов. Функция не является...

Создать класс Vector (вектор целых чисел)
Создать класс Vector (вектор целых чисел), переопределить для него операции: а) &quot;+=&quot; - сложение векторов с сохранением значения...

Создать класс циклического буфера для целых чисел
задача - класс циклического буера для целых чисел. размер массива задаётся в конструкторе, элементы добавляются в конец и вынимаются из...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru