Дабрый день уважаемые форумчане! нужна ваша помощь.. Подскажите пожалуйста, я в программировании ничего совсем не понимаю, но вопрос стоит в слейдующем! Возможно ли кими-нибуть способами или методами написать программу *Мега-Калькулятор, для работы не просто с ким-то набором цыфр, там 6,8 или 10-15, а просто с безумным количеством цыфар! чей наминал превышеат порядка 1.000.000 шт. символов? помогите пожалуйста, ничего навороченного в калькуляторе не нужно, только самые обычные бональные "+" да "-" ...
*скорость работы конечно бы хотелось чтобы бала как можно максимальной....
Числа хранить в строках, и обрабатывать по принципу сложения вычитания в столбик. А а складывать\вычитать можно без преобразования в числа, пользуясь тем что коды цифр идут по порядку.
Числа хранить в строках, и обрабатывать по принципу сложения вычитания в столбик. А а складывать\вычитать можно без преобразования в числа, пользуясь тем что коды цифр идут по порядку.
а реально ли написать такда будет такую простенькую программку? ну предположим допустим что целое число состоит из чуть более чем 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)
а если разряда не хватит?
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 знаков, а другому программу которая их сложит, третьему что б вычитала и т.д.