Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Факториал, чето совсем не понятное задание 
:(
    Опции темы
Akina
Дата 3.11.2004, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



maxim1000
арифметику больших чисел не обязательно реализовывать на стрингах - я лет 15 назад кодил на АСМе работу с числами до 128 килоцифр длиной (в BCD) помнится... И работало... в высоких языках это представляется как литой массив бин-данных...

Это сообщение отредактировал(а) Akina - 3.11.2004, 14:22


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxim1000
Дата 3.11.2004, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата
арифметику больших чисел не обязательно реализовывать на стрингах - я лет 15 назад кодил на АСМе работу с числами до 128 килоцифр длиной (в BCD) помнится... И работало... в высоких языках это представляется как литой массив бин-данных...

про арифметику больших чисел на строках я и не думал
все, что я хотел сказать, - интересной задачей является решение без использования больших чисел


--------------------
qqq
PM WWW   Вверх
boevik
Дата 3.11.2004, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: нет
Всего: 35



Akina, а не загнется ли комп делая рекурсию на 10.000?


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Akina
Дата 3.11.2004, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



boevik
плевать... ну обвалится из-за переполнения стека - как максимум...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
boevik
Дата 3.11.2004, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: нет
Всего: 35



Цитата(Akina @ 3.11.2004, 17:18)

boevik
плевать... ну обвалится из-за переполнения стека - как максимум...

Тогда можно и рекурсией :hehe


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
maxim1000
Дата 3.11.2004, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



тут может подойти что-то вроде этого:
Код

int func(unsigned int n)
{
 x=1;
 for(c=1;c<=n;c++)
 {
   int qqq=c;
   while((x%2==0)&&(qqq%5==0))
   {
     x/=2;
     qqq/=5;
   }
   while((x%5==0)&&(qqq%2==0))
   {
     x/=5;
     qqq/=2;
   }
   x*=qqq;
   x%=100000;
 }
 return x%10;
}

Добавлено @ 18:17
только на сильно больших значениях я его не проверял
для 10 вроде работает

нули убираются как только обнаруживаются
используются последние 5 ненулевых цифр (пять выбрано для того, чтобы при умножении на число 1..10000 не возникало переполнения)


Это сообщение отредактировал(а) maxim1000 - 3.11.2004, 18:14


--------------------
qqq
PM WWW   Вверх
Alex101
Дата 4.11.2004, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 891
Регистрация: 8.4.2002
Где: Москва

Репутация: 1
Всего: 10



Код

Var
i,r,x,n: Integer;

Begin
ReadLn(n);
r:=1;
for i:=1 to n do
Begin
x:=i;
while x mod 10 = 0 do
x:=x div 10;
x:=x mod 100;
r:=(r*x);

while r mod 10 = 0 do
r:=r div 10;

r:=r mod 100;
End;
WriteLn(r mod 10);
End.

Проверьте, у меня компилера нет smile


--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
chaos
Дата 5.11.2004, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



Цитата(Alex101 @ 4.11.2004, 22:48)
Код

Var
i,r,x,n: Integer;

Begin
ReadLn(n);
r:=1;
for i:=1 to n do
Begin
x:=i;
while x mod 10 = 0 do
x:=x div 10;
x:=x mod 100;
r:=(r*x);

while r mod 10 = 0 do
r:=r div 10;

r:=r mod 100;
End;
WriteLn(r mod 10);
End.

Проверьте, у меня компилера нет smile

блин я не могу меня то же нет
PM WWW   Вверх
chaos
Дата 5.11.2004, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



Цитата(chaos @ 5.11.2004, 08:11)
Цитата(Alex101 @ 4.11.2004, 22:48)
Код

Var
i,r,x,n: Integer;

Begin
ReadLn(n);
r:=1;
for i:=1 to n do
Begin
x:=i;
while x mod 10 = 0 do
x:=x div 10;
x:=x mod 100;
r:=(r*x);

while r mod 10 = 0 do
r:=r div 10;

r:=r mod 100;
End;
WriteLn(r mod 10);
End.

Проверьте, у меня компилера нет smile

блин я не могу меня то же нет

вспомнил!! делфей же можно компильнуть!!!

Работает!!!

PM WWW   Вверх
Akina
Дата 5.11.2004, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Проверь на больших числах - 26, 126, 626...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
chaos
Дата 9.11.2004, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



Цитата(Akina @ 5.11.2004, 10:36)
Проверь на больших числах - 26, 126, 626...

для 26, а для остальных хз как проверить
PM WWW   Вверх
Akina
Дата 9.11.2004, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



chaos
Это я к тому что для чисел менее 25 достаточно просчитывать последнюю ненулевую цифирь, для чисел 26-50 - уже 2, до 75 - три, до 100 - 4, до 125 - 5, до 150 - уже 7... в общем по n-1 дополнительной хвостовой цифири для каждого множителя, делящегося на 25 (где n - кол-во пятерок средим его простых множителей)...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Alex101
Дата 9.11.2004, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 891
Регистрация: 8.4.2002
Где: Москва

Репутация: 1
Всего: 10



Я в нашем билдере до 27 могу посчитать.
27! = 10888869450418352160768000000
А так - либо "длинная арифметика" (что не очень сложно), либо Хаскел, там хоть до миллиона считай.



--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
maxim1000
Дата 9.11.2004, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



а мой вариант никого не интересует? smile
27->8
26->4
126->8
626->6


--------------------
qqq
PM WWW   Вверх
val
Дата 9.11.2004, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев

Репутация: 1
Всего: 7



Цитата
а мой вариант никого не интересует?


Проверил, похоже тоже должен работать...


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0582 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.