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

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

10.09.2015, 10:22. Показов 5519. Ответов 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
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru