Твой софтовый форум > Тематические форумы > Программирование

Программа МЕГА-Калькулятор*

,

дайте совет пожалуйста..

Дата публикации: 19.01.2009 - 12:42
nokeMoH
smile.gif Дабрый день уважаемые форумчане! нужна ваша помощь.. Подскажите пожалуйста, я в программировании ничего совсем не понимаю, но вопрос стоит в слейдующем! Возможно ли кими-нибуть способами или методами написать программу *Мега-Калькулятор, для работы не просто с ким-то набором цыфр, там 6,8 или 10-15, а просто с безумным количеством цыфар! чей наминал превышеат порядка 1.000.000 шт. символов? помогите пожалуйста, ничего навороченного в калькуляторе не нужно, только самые обычные бональные "+" да "-" ...

*скорость работы конечно бы хотелось чтобы бала как можно максимальной....

Спасибо....
AquaTour
Code
 
123165456464654654564654464646
+
           4644544564456456464

Числа хранить в строках, и обрабатывать по принципу сложения вычитания в столбик. А а складывать\вычитать можно без преобразования в числа, пользуясь тем что коды цифр идут по порядку.
nokeMoH
Цитата | Quote(AquaTour @ 10.01.2009 - 16:18)
Code
 
123165456464654654564654464646
+
           4644544564456456464

Числа хранить в строках, и обрабатывать по принципу сложения вычитания в столбик. А а складывать\вычитать можно без преобразования в числа, пользуясь тем что коды цифр идут по порядку.
*
а реально ли написать такда будет такую простенькую программку? ну предположим допустим что целое число состоит из чуть более чем 1.000.000 шт. цыфар, а вычитается и сей суммы число, чьё количиство символов будет равным в 1.000 шт. ?
aav8
>а реально ли написать такда будет такую простенькую
> программку? ну предположим допустим что целое число состоит из
> чуть более чем 1.000.000 шт. цыфар, а вычитается и сей суммы
> число, чьё количиство символов будет равным в 1.000 шт. ?

Задача действительно не очень сложная.
А откуда берутся такие числа?
Toxa33rus
>а реально ли написать такда будет такую простенькую
> программку? ну предположим допустим что целое число состоит из
> чуть более чем 1.000.000 шт. цыфар, а вычитается и сей суммы
> число, чьё количиство символов будет равным в 1.000 шт. ?

строки считывать надо с конца и еще фишка: 998999 символов (1.000.000-1.000 - 1) первой строки можно записать сразу т.к. от них ничего не будут отнимать.

А на каком языке собираешься писать?
AquaTour
Цитата | Quote
(1.000.000-1.000 - 1)
а если разряда не хватит? smile.gif
Toxa33rus
Цитата | Quote
а если разряда не хватит?

ой. сглупил немного ))
Но если хватит то применить можно. Это быстрее чем прибавлять 999999 нулей.
Кстати можно немного уточнить: смело копировать можно все символы от начала до последнего ненулевого но не дальше чем до 1.000.000-1.000 (для верхнего примера)

З.Ы. Автор похоже собрался посчитать сколько молекул во Вселенной за минусом кол-ва молекул в Солнечной системе )))
aav8
Кол-во молекул во вселенной можно считать в плавающей арифметике.
Насколько я помню стандартное плавающее представление до 10 прмерно в 980 степени.
Точность (кол-во значащих цифр) сильно не нужна, поскольку они (молекулы/атомы) постоянно рождаются и аннигилируют :-).
Для таких подсчетов был придуман гугл (10 в степени 100).
поправьте, если не прав.
В данном случае все цифры верные.
Собственно арифметику нужно писать на ассемблере - будет быстро и займет примерно 10-30 строк.
> Числа хранить в строках, и обрабатывать по принципу сложения вычитания в столбик. А а складывать\вычитать можно без преобразования в числа, пользуясь тем что коды цифр идут по порядку.
Просто в лоб это не прокатит - нужно убирать код символа,
и учитывать двоично-десятичный перенос. Или как-то предварительно преобразовывать исх. числа.
!!!!!
Но все-таки интересует источник исх. данных - ведь не ручками он набирается :-) и куда будет вставляться результат?
!!!!!
> чей наминал превышеат порядка 1.000.000 шт. символов?
Это чуть меньше чем дискета цифр.
В принципе 32-бит процессоры смогут считать до 4Гцифр...
AquaTour
>Просто в лоб это не прокатит - нужно убирать код символа
Получить из символа "0".."9" цифру, можно простым вычитанием константы.
>и учитывать двоично-десятичный перенос. Или как-то предварительно преобразовывать исх. числа.
дык временный буфер завести и хранить в нем поправку для следующего разряда.
aav8
> >Просто в лоб это не прокатит - нужно убирать код символа
> Получить из символа "0".."9" цифру, можно простым вычитанием константы.
> >и учитывать двоично-десятичный перенос. Или как-то предварительно преобразовывать исх. числа.
> дык временный буфер завести и хранить в нем поправку для следующего разряда.

Вчера наткнулся на такой код (пишу по памяти, может где-то ошибусь):

LL: MOV AL,[SI]
ADC [DI]
AAA
SAHF
ADD 030h
SAHF
MOV [DI],AL
DCR SI
DCR DI
LOOPNZ LL

Который все делает, есть аналогичный для всех остальных действий.
Что-то автор темы молчит, откуда берутся исх данные.
Чтобы ввести 1000000 цифр со скоростью профессиональной
машинистки (~10 знаков в секунду) потребуется 1.2 суток.


Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке: Программа МЕГА-Калькулятор*
SoftoRooM © 2004-2024