Найти 100! (факториал)

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
Den4ik
Сообщения: 7
Зарегистрирован: 01 июн 2008, 21:04
Откуда: Grodno

01 июн 2008, 21:50

Написать программу каторая будет вычеслять 100! (сто факториал), используя
Динамические структуры данных.Очереди.
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

02 июн 2008, 19:08

Юзайте поиск, много раз уже решали
It's a long way to the top if you wanna rock'n'roll
Den4ik
Сообщения: 7
Зарегистрирован: 01 июн 2008, 21:04
Откуда: Grodno

02 июн 2008, 20:55

Вроде как все просмотрел, ничего похожего не нашёл.
Если вам не сложно помогите с программой.
Den4ik
Сообщения: 7
Зарегистрирован: 01 июн 2008, 21:04
Откуда: Grodno

03 июн 2008, 03:17

Я знаю только такой способ решения.


function fact(x:integer):longint;
begin
if x=0 then fact:=1 else
fact:=x*fact(x-1);
end;
begin
writeln('otvet',fact(100));
readln;
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

03 июн 2008, 11:38

Рекурсивный факториал очень быстро загнется из-за переполнения стека. Итеративный более живучий
for i:=1 to 100 do
s:=s*i;
Но этот гражданин может дать (и даст скорее всего) ошибку выхода за границы диапазона. Потому что число 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 ни в один из известных мне фиксированных типов данных не уместится. Тут нужны языки, работающие с безразмерными данными, типа Python. Или как-нибудь хитро извращаться, например, написать функцию, которая будет умножать строки "столбиком"
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Serge_Bliznykov
Сообщения: 366
Зарегистрирован: 31 авг 2007, 03:06

03 июн 2008, 14:24

можно (и, скорее всего, НУЖНО) использовать длинную арифметику...
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

03 июн 2008, 14:28

В разделе "Ассемблер" есть решение с использованием байтовых массивов, элементами которого являются цифры. Реализация на паскале еще короче будет. Решение основано на принципе сложения "столбиком".
It's a long way to the top if you wanna rock'n'roll
vnechai
Сообщения: 1
Зарегистрирован: 13 май 2015, 19:32

13 май 2015, 19:34

Функция bcmul() отлично помогжет

Код: Выделить всё

<?php 
            $result = 0;
            $number = 1;
            for($i=1;$i<=100;$i++){
                $number = bcmul( $number, $i);
            }
            echo $number;
            $array  = array_map('intval', str_split($number));
            
            
            foreach($array as $key){
                $result = $result + $key;
            }
            echo "<h1>".$result."</h1>"; 
        ?>
Ответить