https://github.com/ivanoskov/long-number-implementation
https://github.com/ivanoskov/long-number-implementation
Last synced: 12 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/ivanoskov/long-number-implementation
- Owner: ivanoskov
- Created: 2024-11-08T00:02:31.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-11-15T01:31:06.000Z (over 1 year ago)
- Last Synced: 2025-03-16T22:43:55.793Z (over 1 year ago)
- Language: C
- Size: 598 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Длинная арифметика на C

Реализация длинной арифметики для вычисления факториалов больших чисел с визуализацией процесса и отслеживанием памяти.
### Особенности 🚀
- Динамическое выделение памяти
- Визуализация процесса вычисления
- Отслеживание использования памяти
- Поддержка чисел до 10^900000
- Отображение прогресса и важных этапов вычисления
### Структура данных
Большие числа хранятся в структуре:
```c
typedef struct {
int *digits; // динамический массив для хранения цифр
int capacity; // текущая ёмкость массива
int length; // текущая длина числа
} LongNum;
```
Вот схема, как это выглядит в памяти:
```
┌────────────┬────────────┬────────────┬────────┐
│ digits[0] │ digits[1] │ digits[2] │ ... │
├────────────┼────────────┼────────────┼────────┤
│ 123456789 │ 987654321 │ 246813579 │ ... │
└────────────┴────────────┴────────────┴────────┘
▲ ▲ ▲
9 цифр 9 цифр 9 цифр
```
Каждая ячейка хранит 9 цифр числа (BASE = 10^9). Это позволяет эффективно использовать память и избежать переполнения при умножении.
### Визуализация структуры данных
```mermaid
classDiagram
class LongNum {
+int* digits
+int capacity
+int length
+initLongNum()
+multiplyByInt(int)
+printLongNum()
+getBitCount()
+ensureCapacity(int)
+freeLongNum()
}
```
### Процесс умножения
```mermaid
flowchart TD
A[Начальное число] --> B[Проверка размера буфера]
B --> C[Расширение буфера при необходимости]
C --> D[Умножение каждого блока]
D --> E[Обработка переноса]
E --> F[Обновление длины]
```
## Как использовать
1. Клонируйте репозиторий:
```bash
git clone https://github.com/your-username/long-arithmetic
```
2. Соберите проект:
```bash
make
```
3. Запустите:
```bash
./factorial
```
4. Введите число для подсчета факториала. Программа покажет:
- Процесс выделения памяти
- Текущий результат
- Количество бит в числе
- Моменты превышения размеров базовых типов данных
## Технические детали 🔧
- BASE = 10^9 (максимальное значение в блоке)
- Динамическое выделение памяти с начальным размером 16 блоков
- Автоматическое удвоение буфера при необходимости
- Отслеживание и вывод информации о выделении памяти
## Визуальные особенности 🎨
- Цветной вывод в терминале
- Прогресс-бар вычисления
- История выделения памяти
- Отметки о преодолении битовых границ
## Ограничения ⚠️
- Только положительные целые числа
- Максимальный множитель: INT_MAX
- Зависит от доступной системной памяти
## Планы на будущее 🎯
- [ ] Оптимизация использования памяти
- [ ] Добавление операций сложения и вычитания
- [ ] Поддержка отрицательных чисел
- [ ] Реализация деления
- [ ] Добавление тестов производительности