Найти 100! (факториал)
Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill
Написать программу каторая будет вычеслять 100! (сто факториал), используя
Динамические структуры данных.Очереди.
Динамические структуры данных.Очереди.
Юзайте поиск, много раз уже решали
It's a long way to the top if you wanna rock'n'roll
Вроде как все просмотрел, ничего похожего не нашёл.
Если вам не сложно помогите с программой.
Если вам не сложно помогите с программой.
Я знаю только такой способ решения.
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;
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;
Рекурсивный факториал очень быстро загнется из-за переполнения стека. Итеративный более живучий
for i:=1 to 100 do
s:=s*i;
Но этот гражданин может дать (и даст скорее всего) ошибку выхода за границы диапазона. Потому что число 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 ни в один из известных мне фиксированных типов данных не уместится. Тут нужны языки, работающие с безразмерными данными, типа Python. Или как-нибудь хитро извращаться, например, написать функцию, которая будет умножать строки "столбиком"
for i:=1 to 100 do
s:=s*i;
Но этот гражданин может дать (и даст скорее всего) ошибку выхода за границы диапазона. Потому что число 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 ни в один из известных мне фиксированных типов данных не уместится. Тут нужны языки, работающие с безразмерными данными, типа Python. Или как-нибудь хитро извращаться, например, написать функцию, которая будет умножать строки "столбиком"
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
-
- Сообщения: 375
- Зарегистрирован: 31 авг 2007, 03:06
можно (и, скорее всего, НУЖНО) использовать длинную арифметику...
В разделе "Ассемблер" есть решение с использованием байтовых массивов, элементами которого являются цифры. Реализация на паскале еще короче будет. Решение основано на принципе сложения "столбиком".
It's a long way to the top if you wanna rock'n'roll
Функция 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>";
?>