Калькулятор - алгоритм?

User avatar
Win32nipuh
Уже с Приветом
Posts: 2489
Joined: 04 Feb 2002 10:01
Location: Слава Україні!

Калькулятор - алгоритм?

Post by Win32nipuh »

Коллеги, где найти алгоритм для написания калькулятора, который умеет выполнять +,-, *, / для очень больших чисел, которые видимо придется представлять как строки и с ними оперировать?
User avatar
Boriskin
Уже с Приветом
Posts: 18906
Joined: 30 Aug 2001 09:01
Location: 3rd planet

Re: Калькулятор - алгоритм?

Post by Boriskin »

Реализуйте свой собственный класс чисел произвольной точности и пользуйте любой калькулятор, например из книги Страуструпа.
Тупизна как Энтропия. Неумолимо растет.
User avatar
Win32nipuh
Уже с Приветом
Posts: 2489
Joined: 04 Feb 2002 10:01
Location: Слава Україні!

Re: Калькулятор - алгоритм?

Post by Win32nipuh »

Boriskin wrote:Реализуйте свой собственный класс чисел произвольной точности и пользуйте любой калькулятор, например из книги Страуструпа.


Нужно реализовать операции над строками, в которых представлены большие числа, поэтому я думаю Страуструп не подходит.
Т.е., первое, что на ум приходит - это к примеру сложение реализовывать по алгоритму сложения чисел в столбец.
User avatar
geek7
Уже с Приветом
Posts: 20297
Joined: 01 Dec 2003 23:16
Location: Russia->USA

Re: Калькулятор - алгоритм?

Post by geek7 »

Win32nipuh wrote:Т.е., первое, что на ум приходит - это к примеру сложение реализовывать по алгоритму сложения чисел в столбец.

Мне кажется правильное решение, только конечно не по одной цыферке, а по слову (если конечно скорость имеет значение).
А вообще не только алгоритмы, но и библиотеки наверняка имеютя
уж на фортране точно
Zombie416
Уже с Приветом
Posts: 8881
Joined: 17 Jun 2003 04:41

Post by Zombie416 »

Если числа целые и на C++, стяните любую криптографическую библиотеку - Crypto++ например. Там есть классы для работы с длинными целыми.

Или вот это попробуйте - http://www.swox.com/gmp/ .

Самому писать - дело неблагодарное, особенно если скорость работы имеет хоть какое-то значения.
User avatar
GShapiev
Уже с Приветом
Posts: 2278
Joined: 02 Jan 2001 10:01
Location: MSK; NJ; MA; UAE, Chicago

Post by GShapiev »

Вот что у меня получилось за 5 минут с Экселем
Сложение. Жирным выделен конечный результат.
Дальше можно улучшать как захочется
You do not have the required permissions to view the files attached to this post.
Гриша
------------
Why would anybody come here if they had a pony? Who leaves a country packed with ponies to come to a non-pony country? It doesn't make sense.. am I wrong?
User avatar
IPoloz
Уже с Приветом
Posts: 427
Joined: 08 May 2001 09:01

Post by IPoloz »

User avatar
GShapiev
Уже с Приветом
Posts: 2278
Joined: 02 Jan 2001 10:01
Location: MSK; NJ; MA; UAE, Chicago

Post by GShapiev »

del
Гриша
------------
Why would anybody come here if they had a pony? Who leaves a country packed with ponies to come to a non-pony country? It doesn't make sense.. am I wrong?
Zombie416
Уже с Приветом
Posts: 8881
Joined: 17 Jun 2003 04:41

Post by Zombie416 »


Она небесплатная. "LiDIA, including the point counting package, is free for non-commercial pruposes. A license fee is not required for non-commercial applications."
User avatar
Boriskin
Уже с Приветом
Posts: 18906
Joined: 30 Aug 2001 09:01
Location: 3rd planet

Re: Калькулятор - алгоритм?

Post by Boriskin »

Win32nipuh wrote:
Boriskin wrote:Реализуйте свой собственный класс чисел произвольной точности и пользуйте любой калькулятор, например из книги Страуструпа.


Нужно реализовать операции над строками, в которых представлены большие числа


Либо я не врубился в вашу задачу, либо... 8)
реализуете нечто вроде class Number, в котором опять таки реализуете все возможные операции как то +, -, *, /. А внутри как хотите - так и храните - хоть в строках, хоть в массивах. И - вместо встроенных типов подсовываете в страуструповский калькулятор...
Попутно неплохой трениг по плюсам. :mrgreen:

Или я чего то пропустил?
Тупизна как Энтропия. Неумолимо растет.
User avatar
Win32nipuh
Уже с Приветом
Posts: 2489
Joined: 04 Feb 2002 10:01
Location: Слава Україні!

Re: Калькулятор - алгоритм?

Post by Win32nipuh »

Boriskin wrote:
Win32nipuh wrote:
Boriskin wrote:Реализуйте свой собственный класс чисел произвольной точности и пользуйте любой калькулятор, например из книги Страуструпа.


Нужно реализовать операции над строками, в которых представлены большие числа


Либо я не врубился в вашу задачу, либо... 8)
реализуете нечто вроде class Number, в котором опять таки реализуете все возможные операции как то +, -, *, /. А внутри как хотите - так и храните - хоть в строках, хоть в массивах. И - вместо встроенных типов подсовываете в страуструповский калькулятор...
Попутно неплохой трениг по плюсам. :mrgreen:

Или я чего то пропустил?


Все ок, вопрос в алгоритмах реализации опреаций, хранение действительно не проблема, но скорее всего в строках. Да, пирдется видимо реализовывать пересчет в системы исчисления с большим основанием.
Идея Гриши хорошая, как частный случай.
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

Еще Керниган и Ритчие в своей книжке описали классный и простой алгоритм с полиш нотацией. Без всяких деревьев и прочих комплексностей.
Верить нельзя никому - даже себе. Мне - можно!
User avatar
Win32nipuh
Уже с Приветом
Posts: 2489
Joined: 04 Feb 2002 10:01
Location: Слава Україні!

Post by Win32nipuh »

A. Fig Lee wrote:Еще Керниган и Ритчие в своей книжке описали классный и простой алгоритм с полиш нотацией. Без всяких деревьев и прочих комплексностей.

Наверное я неправильно объяснил суть:
пример: юзер вводит две строки длиной 1000 символов (цифр), вторая длиной 500 символов (цифр) и между ними знак * (а возможны еще +, -, /)
И тот же юзер хочет получить на выходе строку-результат умножения вот таких чисел.
Уважаемый A. Fig Lee, чем тут может помочь Керниган или Ричи? :-), Увы...
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

Win32nipuh wrote:
A. Fig Lee wrote:Еще Керниган и Ритчие в своей книжке описали классный и простой алгоритм с полиш нотацией. Без всяких деревьев и прочих комплексностей.

Наверное я неправильно объяснил суть:
пример: юзер вводит две строки длиной 1000 символов (цифр), вторая длиной 500 символов (цифр) и между ними знак * (а возможны еще +, -, /)
И тот же юзер хочет получить на выходе строку-результат умножения вот таких чисел.
Уважаемый A. Fig Lee, чем тут может помочь Керниган или Ричи? :-), Увы...

По мотивам Вашего предыдущего выступления с деревьями... :pain1:
Строки надо пушать на стек ясен пень.
Верить нельзя никому - даже себе. Мне - можно!
User avatar
Win32nipuh
Уже с Приветом
Posts: 2489
Joined: 04 Feb 2002 10:01
Location: Слава Україні!

Post by Win32nipuh »

A. Fig Lee wrote:По мотивам Вашего предыдущего выступления с деревьями... :pain1:
Строки надо пушать на стек ясен пень.


Да, извините, это разные задачи...

Кстати, по мотивам рпедыдущего выступления по поводу деревьев: реализовал ДНФ, красотища :D , понравилось "лазить по деревьям".
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

Win32nipuh wrote:
A. Fig Lee wrote:По мотивам Вашего предыдущего выступления с деревьями... :pain1:
Строки надо пушать на стек ясен пень.


Да, извините, это разные задачи...

Кстати, по мотивам рпедыдущего выступления по поводу деревьев: реализовал ДНФ, красотища :D , понравилось "лазить по деревьям".


а чем дерево лучше?
Скорость? Меньше памяти ест? Проще? Мне кажется единственно - оно ближе к пониманию.
Верить нельзя никому - даже себе. Мне - можно!
vaduz
Уже с Приветом
Posts: 27652
Joined: 15 Jul 2002 17:05
Location: MD

Post by vaduz »

А чё мучаться-то? Взять BigInteger из Java да декомпильнуть, всего делов-то.
Hamster
Уже с Приветом
Posts: 11475
Joined: 20 Nov 2000 10:01
Location: Escondido, CA

Post by Hamster »

Или пойти на топкодер, Invitational 2001 Semifinals C+D, hardest
Правда, небольшая проблема - только одна успешная submission, и та на Яве. У меня было рабочее решение, но оно где-то потерялось. Придется искать в practice room'е.
User avatar
Isaev
Уже с Приветом
Posts: 279
Joined: 11 Jul 2002 22:21
Location: Palo Alto, CA

Post by Isaev »

A. Fig Lee wrote:
Win32nipuh wrote:Кстати, по мотивам рпедыдущего выступления по поводу деревьев: реализовал ДНФ, красотища :D , понравилось "лазить по деревьям".

а чем дерево лучше?
Скорость? Меньше памяти ест? Проще? Мне кажется единственно - оно ближе к пониманию.
Возможности практически безграничны - можно делать практисеки все что угодно. Польская нотация позволяет только вычислять.
User avatar
IA72
Уже с Приветом
Posts: 956
Joined: 04 Mar 2002 10:01

Post by IA72 »

Hamster wrote:Или пойти на топкодер, Invitational 2001 Semifinals C+D, hardest
Правда, небольшая проблема - только одна успешная submission, и та на Яве. У меня было рабочее решение, но оно где-то потерялось. Придется искать в practice room'е.


Я когда-то, года 4 назад, делал как тестовую задачу - сложение и умножение неограниченно больших целых чисел. Скорость там не особенно играла роль, поэтому просто представил числа как строки (то есть почти неограниченно получилось :)), и спокойно так их в цикле обрабатывал, зпдпнными кусками.
Работы - на несколько часов.
User avatar
Win32nipuh
Уже с Приветом
Posts: 2489
Joined: 04 Feb 2002 10:01
Location: Слава Україні!

Post by Win32nipuh »

uuid wrote:
A. Fig Lee wrote:
Win32nipuh wrote:Кстати, по мотивам рпедыдущего выступления по поводу деревьев: реализовал ДНФ, красотища :D , понравилось "лазить по деревьям".

а чем дерево лучше?
Скорость? Меньше памяти ест? Проще? Мне кажется единственно - оно ближе к пониманию.
Возможности практически безграничны - можно делать практисеки все что угодно. Польская нотация позволяет только вычислять.


Вот, именно так.
Я когда делал эту задачу, искал какие-нибудь готовые лексические анализаторы, так большинство из них сводится к evaluation по ходу пьесы, т.е. сразу же выполняются указанные операции.
А в моей предыдущей задаче нужно было разобрать строку, заданную юзером для поиска в базе в некоем своем "человеческом" синтаксисе, и преобразовать ее к синтаксису полнотекстового поиска SQL Server.
И в этом случае нужно было дерево разбора, по которому нужно было пройти, построить ДНФ, по пути , по поддеревьям применить правило Де Моргана, и при втором проходе построить XML.
Над строкой так не поиздеваешься :-)

Потому uuid - спасибо за отличную идею :D

Return to “Вопросы и новости IT”