This repository has been archived on 2023-05-13. You can view files and clone it, but cannot push or open issues or pull requests.
mipt_cpp/term1/seminar02_encapsulation/1number/number.h
2023-02-25 19:34:24 +03:00

63 lines
2.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
/*
Класс Number -- класс положительных больших чисел
Большое число будет храниться в динамическом массиве data
Каждый элемент этого массива содержит разряд числа в 100-ричной системе счисления
(так как base = 100)
По сути, каждый элемент data хранит две цифры числа в десятичной записи
Значение 100 для системы счисления выбрано как компромис между
эффективностью и удобством написания программы.
Если выбрать значения базы 10 - то программа будет не так эффективна по памяти
Если выбрать значения базы 256 (максимально эффективное использование памяти для типа char),
то алгоритм печати на экран сильно усложнится
В качестве альтернативы, можно было выбрать базу 1e9,
изменив при этом тип элементов c char на int
capacity - размер массива data
size - сколько ячеек занимет число в массиве data
size <= capacity
Для удобства разряды числа хранятся в обратном порядке
Например, число 12345678 соответствует массиву
data = {78, 56, 34, 12}
(это упрощает многие алгоритмы с такими числами)
*/
class Number {
private:
static const int base = 100;
std::size_t size;
std::size_t capacity;
char *data;
public:
Number(int a);
Number();
// Конструктор копирования
Number(const Number & n);
Number(const char *str);
~Number();
Number & operator=(const Number & right);
Number operator+(Number a);
void operator+=(const Number & a);
bool isEven() const;
Number operator*(const Number & right) const;
void operator*=(const Number & a);
bool operator==(const Number & a) const;
bool operator!=(const Number & a) const;
bool operator>(const Number & a) const;
bool operator<(const Number & a) const;
void div2();
friend std::ostream & operator<<(std::ostream & stream,
const Number & right);
};
std::ostream & operator<<(std::ostream & stream, const Number & right);