C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  Update World C++: Сборник GPL QT исходников
  Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Дебетовая карта Home Credit [CPS] RU

 Большие числа / Математика / Алгоритмы

Большие числа

Часто на олимпиадах встречаются задачи типа сложить два 50-значных числа, или посчитать 2 в 95-ой степени. Да и вообще задачи такого типа весьма популярны. Нашей группе на летней практике попалось решение квадратных уравнений с произвольными (в смысле величины) коэффициентами.

Идея решения состоит в создании собственного типа данных на основании массива, каждый элемент которого - цифра исходного длинного числа. Потом для этого типа данных определяются процедуры сложения, вычитания, умножения и что еще надо для решения конкретной задачи.

Для решения своей задачи я создал эдакий класс, перегрузил для него кучу операторов (+,-,*,/,<,>,<< ...), написал функцию sqrt. В классе два массива - один содержит цифры целой части, другой - цифры дробной. Для экономии места каждый байт содержит две цифры.

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

И imho это довольно сносный пример перегрузки операторов и создания собственных типов данных. а теперь минусы: не определен перевод из double в этот тип, довольно плохо отлажена, вывод только в поток ostream, процедуры не совсем оптимально реализованы.

В архиве лежат также и тесты на которых это все тестировалось. Для использования в Вашей программе, включите #include "LNum.h" , обьявляйте переменные CLNum a,b и пользуйтесь. Можно пользоваться приведением int a; CLNum b=(CLNum)a;

Скачать демонстрационный проект с исходником (Visual C++ 6.0) - 26 Kb








Дебетовая карта Home Credit [CPS] RU