Программирование

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

,

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

Дата публикации:

nokeMoH, 10.01.2009 - 15:25

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

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

Спасибо....

AquaTour, 10.01.2009 - 16:18

Code
 
123165456464654654564654464646
+
           4644544564456456464

Числа хранить в строках, и обрабатывать по принципу сложения вычитания в столбик. А а складывать\вычитать можно без преобразования в числа, пользуясь тем что коды цифр идут по порядку.

nokeMoH, 10.01.2009 - 16:29

Цитата | Quote(AquaTour @ 10.01.2009 - 16:18)
Code
 
123165456464654654564654464646
+
           4644544564456456464

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

aav8, 12.01.2009 - 7:17

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

Задача действительно не очень сложная.
А откуда берутся такие числа?

Toxa33rus, 12.01.2009 - 11:37

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

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

А на каком языке собираешься писать?

AquaTour, 12.01.2009 - 14:08

Цитата | Quote
(1.000.000-1.000 - 1)
а если разряда не хватит? smile.gif

Toxa33rus, 12.01.2009 - 16:07

Цитата | Quote
а если разряда не хватит?

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

З.Ы. Автор похоже собрался посчитать сколько молекул во Вселенной за минусом кол-ва молекул в Солнечной системе )))

aav8, 13.01.2009 - 6:48

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

AquaTour, 15.01.2009 - 16:08

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

aav8, 19.01.2009 - 10:27

> >Просто в лоб это не прокатит - нужно убирать код символа
> Получить из символа "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 суток.

Toxa33rus, 19.01.2009 - 12:42

Цитата | Quote(aav8 @ 19.01.2009 - 11:27)
Что-то автор темы молчит, откуда берутся исх данные.
*


Да это у них в универе скорее всего одному задали написать программу которая генерирует два числа длинной 1000000 знаков, а другому программу которая их сложит, третьему что б вычитала и т.д. smile.gif


версия для печати -> Полная версия

SoftoRooM © 2004-2024