Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
vizapromo
18 / 11 / 1
Регистрация: 04.12.2012
Сообщений: 51
#1

Длинный факториал - C++

26.01.2013, 15:26. Просмотров 670. Ответов 14
Метки нет (Все метки)

Здравствуйте уважаемые форумчане!, Помогите реализовать программу длинного факториала, очень нужно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2013, 15:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Длинный факториал (C++):

Описать рекурсивные функции вещественного типа, вычисляющие факториал и двойной факториал заданного числа - C++
Описать рекурсивные функции Fact(N) и Fact2(N) вещественного типа, вычисляющие значения факториала N! и двойного факториала N!!...

Длинный НОД - C++
Даны два числа. Найти их наибольший общий делитель. Формат входных данных Вводятся два натуральных числа, не превышающих 10^9 (запись...

Длинный файл)) - C++
Доброго времени суток, господа! Подскажите, почему файл читается некоторое время, а потом перестает.. Код(slovr - открытый на чтение...

Длинный путь - C++
Имеется n городов пронумерованных от 1 до n и m соединяющих дорог. Расстояния между любыми двумя городами равны 1. Найти длину пути между...

Самый длинный палиндром - C++
Помогите написать но только в stdio.h Самый длинный палиндром Палдиндром это число которое читается и налево одинаково и на право к...

Найти самый длинный отрезок - C++
длины отрезка заданы координатами концов.найти самый длинный отрезок.решить с помощью функций. заранее большое спасибо!

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
26.01.2013, 15:44 #2
До какой степени длинного? тип double вполне сохранит в себе точный порядок и достаточное количество знаков мантиссы.

Добавлено через 31 секунду
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <conio.h>
int main()
{
  int f=1;
  double s=1.0;
  for (f=1; f<=100; f++)
    s=s*double(f);
  std::cout<<s;
 getch();
}
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
26.01.2013, 15:46 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <boost/multiprecision/cpp_int.hpp>
 
namespace mpre = boost::multiprecision;
 
int main()
{
    const size_t value = 100;
    mpre::cpp_int fact = 1;
    for (size_t i = 1; i <= value; ++i)
    {
        fact *= i;
    }
    std::cout << fact << std::endl;
}
http://www.boost.org/doc/libs/1_53_0...s/cpp_int.html
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
26.01.2013, 15:52 #4
это вообще какая-то странная левая библиотека.
<boost/multiprecision/cpp_int.hpp>??? К этому ещё какие-то нестандартные lib-ы должны прилагаться что ли? Ну нафиг!
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
26.01.2013, 15:53 #5
Kuzia domovenok, Это boost как бэ.) Практически стандартная библиотека С++.)
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
26.01.2013, 15:54 #6
Цитата Сообщение от ForEveR Посмотреть сообщение
Практически стандартная библиотека С++
Ключевое слово "практически".
Ничего она не стандартная.
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
26.01.2013, 15:59 #7
Kuzia domovenok, Я не собираюсь спорить и разводить оффтоп. Из boost-а взяли очень много для стандарта С++11. Из других библиотек - нет. Думаю обсуждать тут больше нечего, никто ведь не просит им пользоваться, это просто пример.
Avazart
Эксперт С++
7152 / 5329 / 278
Регистрация: 10.12.2010
Сообщений: 23,584
Записей в блоге: 17
26.01.2013, 16:02 #8
Мож gmp или другую либу "длинный чисел", но думаю требуется реализовать именно самому...

Добавлено через 57 секунд
ForEveR, Чет её в стандартной сборке boost под VC++ я её не нахожу
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
26.01.2013, 16:03 #9
Avazart, Ну там же написано версия 1.53. Ее еще в релизе даже нет.
Avazart
Эксперт С++
7152 / 5329 / 278
Регистрация: 10.12.2010
Сообщений: 23,584
Записей в блоге: 17
26.01.2013, 16:05 #10
Цитата Сообщение от ForEveR Посмотреть сообщение
Avazart, Ну там же написано версия 1.53. Ее еще в релизе даже нет.
А толку тогда ?
Somebody
2788 / 1602 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
26.01.2013, 16:10 #11
Уже и без буста было... http://www.cyberforum.ru/showthread.php?t=561268
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
26.01.2013, 16:15 #12
Avazart, Что значит "толку"? К чему этот оффтоп? Она есть как бета. Можно ее скачать на сайте буста. В этой версии появилась работа с длинными числами. Я написал пример, который решает задачу ТС, пользуясь данной библиотекой. Какие вопрос-то?
OhMyGodSoLong
26.01.2013, 16:17
  #13

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
До какой степени длинного? тип double вполне сохранит в себе точный порядок и достаточное количество знаков мантиссы.
Если уж считать большие факториалы с помощью приблизительного double, то и делать это стоит как белые люди:
C++
1
2
3
4
5
6
#include <cmath>
 
double fact(unsigned n)
{
    return sqrt(2 * M_PI * n) * pow(n / M_E, n);
}

Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
26.01.2013, 16:37 #14
Ну во-первых эта приближённая формула вносит ошибку несравнимо большую по сравнению с простым округлением мантиссы типа double
Во-вторых, не факт, что выигрывает по времени.
Соответственно вопрос: а в чём этот метод вообще выигрывает?

Хотя да, всегда полезно знать альтернативный метод. Я не знал.

Добавлено через 8 минут
Всё! я проверил. Вроде ~OhMyGodSoLong~ действительно быстрее, но, как я уже сказал, неточно.
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
26.01.2013, 17:44 #15
Вывести факториал числа
Не устаю копипастить эту ссылку.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2013, 17:44
Привет! Вот еще темы с ответами:

Укоротить более длинный контейнер - C++
Здравствуйте, написал по заданию Липманна небольшую программку, которая сверяет элементы двух контейнеров: встроенного массива и вектора. У...

Вывести самый длинный палиндром - C++
Имеется файл-словарь, в котором записаны слова-палиндромы, как найти и вывести их них самый длинный. Программа просто выводит какое слово...

Обработать очень длинный одномерный вектор - C++
Доброго времени суток. Необходимо обработать одномерный вектор. Вектор имеет очень большую длину и не влезает в одно направление блока: ...

Найти самый длинный палиндром предложения и напечатать его - C++
2.В предложении слова отделяются друг от друга одним или большим числом пробелов. Палиндромом называется слово, которое читается одинаково...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.01.2013, 17:44
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru