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

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

Войти
Регистрация
Восстановить пароль
 
c__
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 8
#1

Факториал большого числа - C++

23.10.2013, 18:22. Просмотров 1085. Ответов 6
Метки нет (Все метки)

Доброго времени суток!
Захотелось вычислить факториал большого числа. Наткнулся на gmp. Посмотрел это http://www.cyberforum.ru/blogs/131347/blog488.html и доку. Получилось так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <gmp.h>
#include <gmpxx.h>
 
int main()
{
  std::cout << "Введите n:\n";
  unsigned long int n;
  std::cin >> n;
  mpz_t result;
  mpz_init(result);
  unsigned long int one = 1;
  mpz_set_ui(result, one);
  for(unsigned long i = n; i >= 0; i--)
    mpz_mul_ui(result, result, i); 
  gmp_printf("n! = %Zd\n", result);
  mpz_clear(result);
}
Компилирую так: g++ -std=c++11 -o fact fact.cpp -lgmpxx -lgmp. Все собирается, но после ввода числа зависает. Подскажите, пожалуйста, в чем трабл!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2013, 18:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Факториал большого числа (C++):

Как посчитать факториал большого числа, если диапазон типа данных (int) ограничен? - C++
а как мне правильно вывести кол-во чисел?? Я так понимаю,что я вышел за пределы диапазона(( int main(int argc, char*argv) { ...

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

Факториал числа - C++
Напишите функцию для нахождения факториала числа. Результат возвращайте через заголовок функции. Объясните, что означает вернуть...

Факториал числа - C++
Помогите пожалуйста мне надо найти (5!)!

Факториал числа - C++
Мне надо найти факториал числа 100 . Помогите пажалуста.

факториал числа n - C++
Как сделать в данной программе так, что бы она высчитывала факториал лишь в диапазоне от 1 до 12. Заранее спасибо. #include &lt;iostream&gt; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
23.10.2013, 18:38 #2
Не разбираюсь в библиотеке gmp. Однако без неё - более чем реально.
1. Длинная арифметика. Нужна операция ввода, вывода, умножения -> факториал.
2. Факториал можно вычислить почти до 30ти примитивными типами. Хранить в типе unsigned long long и убирать нули в числе, считая их и запоминая.
c__
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 8
23.10.2013, 18:59  [ТС] #3
Цитата Сообщение от Hunter13ua Посмотреть сообщение
Не разбираюсь в библиотеке gmp. Однако без неё - более чем реально.
1. Длинная арифметика. Нужна операция ввода, вывода, умножения -> факториал.
2. Факториал можно вычислить почти до 30ти примитивными типами. Хранить в типе unsigned long long и убирать нули в числе, считая их и запоминая.
Думал об этом, но хочется разобраться с gmp.
Avazart
Эксперт С++
7152 / 5329 / 278
Регистрация: 10.12.2010
Сообщений: 23,585
Записей в блоге: 17
23.10.2013, 19:04 #4
Ошибка банальная, в цикле - i без знаковое, значит неотрицательное...
C++
1
2
for(unsigned long i=n; i!=0; i--)
        mpz_mul_ui(result, result, i);
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
23.10.2013, 19:08 #5
c__,
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <gmp.h>
int main()
{
  std::cout << "Введите n:\n";
  unsigned long int n;  std::cin >> n;
  mpz_t result; mpz_init(result);
 
  mpz_fac_ui(result, n);
  gmp_printf("n! = %Zu\n", result);
  mpz_clear(result);
}
для факториала есть спец.функции. Раздел 5.9 - Number Theoretic Functions.
Миниатюры
Факториал большого числа   Факториал большого числа  
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
23.10.2013, 19:13 #6
И да, если используете чисто Сишные функции, то включать <gmpxx.h> и линковать -lgmpxx нет смысла.
c__
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 8
23.10.2013, 19:17  [ТС] #7
Цитата Сообщение от Avazart Посмотреть сообщение
Ошибка банальная, в цикле - i без знаковое, значит неотрицательное...
Код C++
1
2
for(unsigned long i=n; i != 0; i--)
* * * * mpz_mul_ui(result, result, i);
Спасибо, не знал. Рабочий вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <gmp.h>
#include <gmpxx.h>
 
int main()
{
  std::cout << "Введите n:\n";
  unsigned long int n;
  std::cin >> n;
  mpz_t result;
  mpz_init(result);
  unsigned long int one = 1;
  mpz_set_ui(result, one);
  for(unsigned long int i = 1; i <= n; i++)
    mpz_mul_ui(result, result, i);
  gmp_printf("n! = %Zd\n", result);
  mpz_clear(result);
}
Добавлено через 2 минуты
Цитата Сообщение от gromo Посмотреть сообщение
c__,
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <gmp.h>
int main()
{
  std::cout << "Введите n:\n";
  unsigned long int n;  std::cin >> n;
  mpz_t result; mpz_init(result);
 
  mpz_fac_ui(result, n);
  gmp_printf("n! = %Zu\n", result);
  mpz_clear(result);
}
для факториала есть спец.функции. Раздел 5.9 - Number Theoretic Functions.
Спасибо. Для числа Эйлера пригодиться.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2013, 19:17
Привет! Вот еще темы с ответами:

факториал числа - C++
Почему вместо факториала компилятор выводит число 1 #include&lt;iostream&gt; using namespace std; int main() { int number; cout &lt;&lt;...

1% от большого числа - C++
Вводится число 10^6&lt;=N&lt;=10^200 Надо вывести 1% от него. Кто-нибудь может это решить, я очень много времени потратил...

Рекурсия: факториал числа - C++
#include &lt;iostream&gt; using namespace std; int factorial(int n); int main() { cout &lt;&lt; &quot;at main&quot; &lt;&lt; endl; cout &lt;&lt;...

Найти факториал числа - C++
помогите!пожалуйста!=)


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

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

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