Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/64: Рейтинг темы: голосов - 64, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 07.10.2018
Сообщений: 34

Как вычислить факториал большого числа?

22.10.2018, 14:19. Показов 12769. Ответов 20

Студворк — интернет-сервис помощи студентам
Как возвести 1000 в квадрат. Проблема заключается в том, что ни одна строка не вместит в себя число длиной 2568 символов. Я полагаю, что это нужно сделать как-то через архив, записывая каждое число в новую ячейку ахива, но я не смог придумать как.
Задача просто выписать это число, это должно выглядеть как-то так:

4023872600770937735437024339230039857193 748642107146325437...
Число цыфр : 2568

Прошу помощи у тех кто сможет сделать то, что я не смог.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.10.2018, 14:19
Ответы с готовыми решениями:

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

Факториал большого числа
Доброго времени суток! Захотелось вычислить факториал большого числа. Наткнулся на gmp. Посмотрел это...

Вычислить факториал числа
Требуется по заданному числу 1<=N<=12 посчитать его факториал. Учтите, что факториал растет очень бысто и уже при N = 13 результат выйдет...

20
 Аватар для LegionK
393 / 263 / 193
Регистрация: 02.05.2017
Сообщений: 1,003
22.10.2018, 14:31
1000*1000 = 1,000,000
0
0 / 0 / 0
Регистрация: 07.10.2018
Сообщений: 34
22.10.2018, 14:33  [ТС]
LegionK, Спасибо за ответ. Но я ошибся, не 1000 * 1000, а 1000!. Моя ошибочка
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
22.10.2018, 14:45
lufigan, можете попробовать написать алгоритм для умножения в столбик, как в школе, только оперируя строками
0
0 / 0 / 0
Регистрация: 07.10.2018
Сообщений: 34
22.10.2018, 15:06  [ТС]
n1b1ru, Можно попробовать
0
Злостный нарушитель
 Аватар для Verevkin
10309 / 5731 / 1269
Регистрация: 12.03.2015
Сообщений: 26,553
22.10.2018, 15:09
Цитата Сообщение от lufigan Посмотреть сообщение
Проблема заключается в том, что ни одна строка не вместит в себя число длиной 2568 символов.
Да ладно!



Длинная арифметика слышал?
Длинная арифметика: есть ли в C++ библиотека для работы с длинными числами?
0
 Аватар для bedvit
1208 / 259 / 22
Регистрация: 20.05.2016
Сообщений: 1,139
Записей в блоге: 22
22.10.2018, 22:28
Как-то так (пишу по памяти, не за компом)
C++
1
2
3
4
5
6
7
8
#include <mpirxx.h>
int main ()
{
mpz_class a;
mpz_fac_ui(a,1000);
cout << "result is " << a << "\n";
return 0;
}
Ещё пример.
0
0 / 0 / 0
Регистрация: 07.10.2018
Сообщений: 34
22.10.2018, 22:36  [ТС]
bedvit, Спасибо, просто спас! Хотел бы я сказать, но увы, нужно как-то это сделать без установки дополнительных библиотек Задание из университета, на проверку сдается только .срр файл. Но все равно спасибо!
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,274
22.10.2018, 23:22
Тогда твоя задача, как будущего инженера-программиста - написать свою длинную арифметику. Так как ты, судя по всему, до сих пор не научился пользоваться поиском гугля, я сделал это за тебя:

http://cppalgo.blogspot.com/2010/05/blog-post.html

И да, забыл предупредить, возможно вычисление 1000! займёт немало времени...
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
23.10.2018, 09:52
Лучший ответ Сообщение было отмечено lufigan как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <iostream>
#include <vector>
#include <sstream>
 
void addDigit(std::string &number, int digit)
{
    number.insert(0, std::string(1, '0' + digit));
}
 
void multiply(std::string &multiplicand, std::string multiplier)
{
    std::vector<std::string > addendums;
 
    std::string::reverse_iterator i, j;
    int memorized = 0;
    int shift = 0;
 
    for(i = multiplicand.rbegin(); i != multiplicand.rend(); ++i)
    {
        std::string addend = "";
        for(j = multiplier.rbegin(); j != multiplier.rend(); ++j)
        {
            int result = (*i - '0') * (*j - '0');
            result += memorized;
            addDigit(addend, result % 10);
            memorized = result / 10;
        }
 
        if(memorized > 0)
            addDigit(addend, memorized);
 
        memorized = 0;
        addend.append(std::string(shift, '0'));
        ++shift;
        addendums.push_back(addend);
    }
 
    int maxaddend = addendums.back().size();
 
    for(std::string &x: addendums)
    {
        shift = maxaddend - x.size();
        x = std::string(shift, '0') + x;
    }
 
    std::string answer = "";
    memorized = 0;
 
    for(unsigned int digit_index = maxaddend; digit_index > 0; --digit_index)
    {
        int result = 0;
        for(unsigned int addend_index = 0; addend_index < addendums.size(); ++addend_index)
        {
            std::string addend = addendums[addend_index];
            result += (addend[digit_index - 1] - '0');
        }
 
        result += memorized;
        addDigit(answer, result % 10);
        memorized = result / 10;
    }
 
    if(memorized > 0)
        addDigit(answer, memorized);
 
    multiplicand = answer;
    std::cout << answer;
}
 
int main()
{
    std::string multiplicand = "1";
 
    for(int i = 1; i <= 1000; ++i)
    {
        std::ostringstream oss;
        oss << i;
        std::string multiplier = oss.str();
        std::cout << i << "!: ";
        multiply(multiplicand, multiplier);
        std::cout << std::endl;
    }
 
    return 0;
}
lufigan, алгоритм конечно жадный, есть куда развивать
2
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,274
30.10.2018, 14:50
Цитата Сообщение от n1b1ru Посмотреть сообщение
алгоритм конечно жадный, есть куда развивать
Как быстро этот код вычисляет 1000! ?
0
30.10.2018, 15:06

Не по теме:

Цитата Сообщение от alexu_007 Посмотреть сообщение
Так как ты, судя по всему, до сих пор не научился пользоваться поиском гугля
может он с людьми хочет поговорить а не с гуглом.

0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
30.10.2018, 15:37
alexu_007, на всё ушло где-то 6 минут с копейками
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
30.10.2018, 15:58
Цитата Сообщение от n1b1ru Посмотреть сообщение
на всё ушло где-то 6 минут с копейками
на моем железе уйдет 6 дней
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
30.10.2018, 16:06
_stanislav, ваша правда ) Надо было упомянуть, тестировал на работе - i7-3610QM.
Проверю ещё и дома, там машинка скромнее...
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,274
30.10.2018, 17:33
Хм... Моя программа делает это за милисекунды, я не мерял время, потому что результат появляется мгновенно:
Миниатюры
Как вычислить факториал большого числа?  
0
 Аватар для bedvit
1208 / 259 / 22
Регистрация: 20.05.2016
Сообщений: 1,139
Записей в блоге: 22
30.10.2018, 18:53
alexu_007, ваша программа с вашей длинной арифметикой или сторонняя библа из серии GMP, MPIR и им подобная? См. мой пример, пост 7 (где, как раз такое использование). Там, таки да, почти мгновенно.
0
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,814
30.10.2018, 18:55
alexu_007, не больше секунды займет это времени.
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,274
30.10.2018, 19:16
С "моей" длинной арифметикой, которую я сам написал скатал с сайта (см. пост 9). За приблизительно секунду она вычисляет 10000! - 35660 цифр. Написано на Qt:
Вложения
Тип файла: zip 1000f.zip (43.9 Кб, 38 просмотров)
2
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
31.10.2018, 09:33
Как я и написал, мой алгоритм жадный. Я лишь реализовал умножение в столбик (4-ый пост)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.10.2018, 09:33
Помогаю со студенческими работами здесь

Циклы: вычислить факториал числа
1.Надо написать программу которая будет вычислять факториал числа.я вот пробовал чёт не получается: #include &quot;stdafx.h&quot; ...

Вычислить факториал натурального числа
С или С++ 1. Вычислить n! = 1*2*3*…*n. N – вводится. П.5.16.Правил Запрещено создавать темы с множеством вопросов во всех разделах,...

Вычислить факториал целого числа
1. Вычислить факториал целого числа.

Вычислить факториал заданного целого числа
Составить блок схему алгоритма и программу согласно условию задачи. Вычислить факториал заданного целого числа. Факториал числа N...

Вычислить факториал натурального числа n из отрезка [1;20]
Создайте программу, вычисляющую факториал натурального числа n из отрезка , которое пользователь введёт с клавиатуры. Если число будет...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru