как сравнить? пс. код пока не выкладывать, что ли? ппс. сорри, если что не так. пппс. а вот факториал 2000 (число из 5736 цифр) у меня считается уже больше 10 сек. (точнее - 10,5-10,6)
Quote (MCH)
Чтобы макрописатели не скучали в данной ветке
спасибо, не скучали получили результат (х.з. - правильный ли? )
как сравнить? пс. код пока не выкладывать, что ли? ппс. сорри, если что не так. пппс. а вот факториал 2000 (число из 5736 цифр) у меня считается уже больше 10 сек. (точнее - 10,5-10,6)ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Сообщение отредактировал ikki - Воскресенье, 11.11.2012, 17:48
столбиком? Другого не представляю Хотя наверно можно формулу Стирлинга прикрутить, но больно она сложная для реализации
Quote (ikki)
получили результат ... а дальше что?
Думаю, что кто решил 200!, тому несложно посчитать и 1000! (2568 знаков) и 10000! (не стал считать)
Мне было интересно реализовать длинную арифметику в VBA При поиске в интернете вариантов работы с длинной арифметикой на бейсике ничего подходящего не нашел, пришлось писать самомтоятельно, хотя алгоритмы на C имеются, а в Java вообще есть встроенный класс с длинной арифметикой, ничего самому придумывать не нужно
Реализовал несколько функций с длинкой: умножение длинных чисел, сложение/вычитание длинных чисел, деление длинного на короткое, квадратный корень пока еще не реализовал, чуть позже выложу
Quote (ikki)
правда, алгоритм у меня до отвращения простой.
столбиком? Другого не представляю Хотя наверно можно формулу Стирлинга прикрутить, но больно она сложная для реализации
Quote (ikki)
получили результат ... а дальше что?
Думаю, что кто решил 200!, тому несложно посчитать и 1000! (2568 знаков) и 10000! (не стал считать)
Мне было интересно реализовать длинную арифметику в VBA При поиске в интернете вариантов работы с длинной арифметикой на бейсике ничего подходящего не нашел, пришлось писать самомтоятельно, хотя алгоритмы на C имеются, а в Java вообще есть встроенный класс с длинной арифметикой, ничего самому придумывать не нужно
Реализовал несколько функций с длинкой: умножение длинных чисел, сложение/вычитание длинных чисел, деление длинного на короткое, квадратный корень пока еще не реализовал, чуть позже выложуMCH
Саш, спасибо за ссылку, посмотрел твою реализацию, отметил полезным хранить длину числа, может ускорить некоторые моменты. Я у себя брал основание 10000 вместо 10, немного сложнее вывод, но считать должно быстрее.
т.к. уже есть и не одно решение на макросах, выкладываю свою реализацию длинки. Не гарантирую оптимальности кода как по размеру, так и по скорости, но это мой велосипед
В пиложенном файле несколько задач, в качестве примера, решаемых с помощью длинной арифметики: факториалы, степень двойки, числа Фибоначчи, задача о счастливых билетах
Саш, спасибо за ссылку, посмотрел твою реализацию, отметил полезным хранить длину числа, может ускорить некоторые моменты. Я у себя брал основание 10000 вместо 10, немного сложнее вывод, но считать должно быстрее.
т.к. уже есть и не одно решение на макросах, выкладываю свою реализацию длинки. Не гарантирую оптимальности кода как по размеру, так и по скорости, но это мой велосипед
В пиложенном файле несколько задач, в качестве примера, решаемых с помощью длинной арифметики: факториалы, степень двойки, числа Фибоначчи, задача о счастливых билетахMCH
Private Declare Function GetTickCount Lib "kernel32" () As Long
Sub f() Dim s$, s2$, i%, j%, k%, k1%, k2%, t& t = GetTickCount s2 = "1" For i = 2 To 200 k2 = 0: s = s2: s2 = "" For j = 1 To Len(s) k = i * Mid(s, j, 1) + k2 k1 = k Mod 10: s2 = s2 & k1: k2 = k \ 10 Next If k2 Then s2 = s2 & StrReverse(k2) Next [a1].Value = "'" & StrReverse(s2) [a2].Value = GetTickCount - t End Sub
[/vba]
Quote (MCH)
выкладываю свою реализацию длинки
в "Есть готовое решение", имхо, надо положить.
мой вариант (всё в одной процедуре)
[vba]
Code
Private Declare Function GetTickCount Lib "kernel32" () As Long
Sub f() Dim s$, s2$, i%, j%, k%, k1%, k2%, t& t = GetTickCount s2 = "1" For i = 2 To 200 k2 = 0: s = s2: s2 = "" For j = 1 To Len(s) k = i * Mid(s, j, 1) + k2 k1 = k Mod 10: s2 = s2 & k1: k2 = k \ 10 Next If k2 Then s2 = s2 & StrReverse(k2) Next [a1].Value = "'" & StrReverse(s2) [a2].Value = GetTickCount - t End Sub
[/vba]
Quote (MCH)
выкладываю свою реализацию длинки
в "Есть готовое решение", имхо, надо положить.ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Сообщение отредактировал ikki - Воскресенье, 11.11.2012, 19:58