Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/35: Рейтинг темы: голосов - 35, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 08.12.2012
Сообщений: 5
1

программа вычисления факториала любого числа

08.12.2012, 15:06. Показов 6446. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите написать программу на C++!!!
надо написать программу, которая вычислит факториал любого числа. данные читает из файла и результат записывает обратно в файл
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.12.2012, 15:06
Ответы с готовыми решениями:

Напишите программу вычисления суммы: 1! + 2! + 3! + … + n!, используя функцию вычисления факториала числа k.
Напишите программу вычисления суммы: 1! + 2! + 3! + … + n!, используя функцию вычисления факториала...

Программа для вычисления факториала
Зравствуйте, помогите, пожалуйста, написать программу, которая вычисляет факториал введенного с...

Реальзовать Функцию вычисления факториала числа
Функция вычисления факториала числа..

Написать программу для вычисления факториала числа
1) написать программу для вычисления факториала числа n!=1*2*3...*n. Число n вводится с клавиатуры

16
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
08.12.2012, 15:14 2
Цитата Сообщение от elena3 Посмотреть сообщение
вычислит факториал любого числа
чему равен факториал бесконечности?
0
425 / 390 / 113
Регистрация: 21.09.2012
Сообщений: 913
08.12.2012, 15:29 3
Цитата Сообщение от Croessmah Посмотреть сообщение
чему равен факториал бесконечности?
∞ * (∞-1)!
1
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
08.12.2012, 15:32 4

Не по теме:

Цитата Сообщение от v.a.l.i.d Посмотреть сообщение
∞ * (∞-1)!
Не нужно приводить формулы, приведите конкретный пример, да и еще посчитайте сколько понадобиться оперативной памяти и времени для рассчета.



У Вас в любом случае должен быть какой-то предел
0
0 / 0 / 0
Регистрация: 08.12.2012
Сообщений: 5
08.12.2012, 21:58  [ТС] 5
факториал бесконечности равен бесконечности
0
35 / 40 / 15
Регистрация: 25.10.2011
Сообщений: 175
08.12.2012, 23:08 6
даже калькулятор Windows-а при fact(10000) пишет overflow(переполнение)
0
Venzo
08.12.2012, 23:14
  #7

Не по теме:

Цитата Сообщение от (SkyNet) Посмотреть сообщение
даже калькулятор Windows-а при fact(10000) пишет overflow(переполнение)
даже...?))) если б вы сказали, например, даже матлаб, или другой мат пакет - другой дело) калькулятор винды врядли показатель)

0
425 / 390 / 113
Регистрация: 21.09.2012
Сообщений: 913
08.12.2012, 23:19 8
у меня никакого переполнения в калькуляторе нет:
fact(10000) = 2,8462596809170545189064132121199e+35659
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
08.12.2012, 23:37 9
Вас помочь попросили, а не хвастаться возможностями своих систем). У меня питон факториал 2000 считал)) Рекурсивно!! Долгова то но норм было дело. Не важно. Я как понял тут что-то типо работы с длинной арифметикой?
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
09.12.2012, 00:54 10
Croessmah, тут задача на длинную арифметику.
0
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
09.12.2012, 05:27 11
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <gmp.h>
 
int main()
{
    mpz_t rop;
    unsigned long int x = 2000;
 
    mpz_init(rop);
    mpz_fac_ui(rop, x);
    gmp_printf("%Zd", rop);
 
    return 0;
}
Кликните здесь для просмотра всего текста
33162750924506332411753933805763240382811172081057803945719354370603807790560082 24002732308597325922554023529412258341092580848174152937961313866335263436889056 34058556163940605117252571870647856393544045405243957467037674108722970434684158 34375243158087753364512748799543685924740803240894656150723325065279765575717967 15367186893590561128158716017172326571561100042140124204338425737127001758835477 96899921283528996665853405579854903657366350133386550401172012152635488038268152 15224692099520603156441856548067594649705155228820523489999572645081406553667896 95321014676226713320268315522051944944616182392752040265297226315025747520482960 64750927394165856283531779574482876314596450373991327334177263608852490093506621 61014445970941270782131373256383157230201994991495831647094277447387032798554967 42986088393763268241524788343874695958292577405745398375015858154681362942179499 72399813599481016556563876034227312912250384709872909626622461971076605931550201 89513558316535787149229091677904970224709461193760778516511068443225590564873626 65303773846503907880495246007125494026145660722541363027549136715834060978310749 45282217490781347709693241556111339828051358600690594619965257310741177081519922 56451677857145805660218565476095237746301667942248844448579834980154803262082989 09658573817518886193766928282798884535846398965942139529844652910920091037100461 49449915828588050761867924946385180879874512891408019340074625920057098729578599 64365065589561241023101869055606030878362911050560124590899838341079936790205207 68586691834779065585447001486926569246319333376124280974200671728463619392496986 28468719993450393889367270487127172734561700354867477509102955523953547941107421 91330135681954109194146276641754216158762526285808980122244389024867718205495941 57519917012717675717874958616196659318788551418357820926014820717773317353960343 04969082070589958701381980813035590160762908388574561288217698136182483576739218 30311841471913398689284234400077924669120976673165143349443747323563657204884447 83318549416930301245316762327453678793228474738244850922831399525097325059791270 31047683601481191102229253372697693823670057565612400290576043852852902937606479 53345817966612383960526254910718666386935476610845504619810208405063582767652658 94923932495196859541716724193295306836734955440045863598381610430594498266275306 05423580755894108278880427825951089880635410567917950974017780688782869810219010 90014835206168888372025031066592206860148364983053278208826353655804360568678128 41692171330471411763121758957771226375847531235172309905498292101346873042058980 14418063875382664169897704237759406280877253702265426530580862379301422675821187 14350291863763634030017325181826207603974736959520264263236414544685111342720215 04583838510101369413130348562219166316238926327658153550112763078250599691588245 33457435437863683173730673296589355199694458236873508830278657700879749889992343 55556624068283476378468518384497364887395247510322422211056120129582965719136810 86938254757641188868793467251912461921511447388362695916436724900716534282281526 61247800463922544945170363723627940757784542091048305461656190622174286981602973 32404652020199281385488268195100728286970107073750092766648750217477537274235150 87482467202741700315811228058961781221607474379475109506209385566745812525183766 82157712807861499255876132352950422346387878954850885764466136290394127665978044 20209228133798711590089626487894241321045492500356667063290944157937298674342147 05072135889320195807230647814984295225955890127548239717733257229103257609297907 33299545056388362640474650245080809469116072632087494143973000704111418595530278 82735765481918200244969776111134631819528276159096418979095811733862720608891043 29452449785351470141124421430554860896395783783473253235957632914389252883939862 56273242862775563140463830389168421633113445636309571965978466338551492316196335 67535513840342580416291983782226690952177015317533873028461084188655413832917195 13321178957285416620848236828179325129312375215419269702697032994776438233864830 08871530373405666383868294088487730721762268849023084934661194260180272613802108 00507821574100605484820134785957810277070778065551277254050167433239606625321641 50048087724030476119290322101543853531386855384864255707907953411765195711886837 39880683895792743749683498142923292196309777090143936843655333359307820181312993 45502420604456334057860696247196150560339489952332180043435996725662392719643540 28720554750120798543319706747973131268135236537440856622632067688375851327828962 52333284341812977624697079543436003492343159239674763638912115285406657783646213 91124744705125522634270123952701812704549164804593224810885867460095230679317596 77555810116799400052498063037631413444122690370349873557999160092592480750524855 41568266281760815446308305406677412630124441864204108373119093130001154470560277 77372437806718889977085105672727678124719883285769584421758889516046786820481001 00478164623582208385324881342708340798684866321627202088233087278190853788454691 31556021728873121907393965209260229101477527080930865364979858554010577450279289 81460368843182150863724621696787228216934737059928627711244769092090298832016683 01702734202597656717098633112163495021712644268271196502640542282317596308744753 01847194095524263411498469508073390080000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000
Process returned 0 (0x0) execution time : 0.015 s
2
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
09.12.2012, 06:38 12
Цитата Сообщение от go Посмотреть сообщение
Croessmah, тут задача на длинную арифметику.
я в курсе, но если нет предела, то всё равно упремся в нехватку памяти или время выполнения. Ибо факториал 20000 это одно, а факториал числа, в котором несколько тысяч знаков?
1
0 / 0 / 0
Регистрация: 08.12.2012
Сообщений: 5
10.12.2012, 16:31  [ТС] 13
подскажите, пожалуйста, хотя бы как к этой части программы дописать чтение из файла и запись результата обратно в файл!!!!


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
#include <stdio.h>
#include <stdlib.h>
 typedef  double  udouble_t;
udouble_t fact_while(size_t);
udouble_t fact_rec(size_t);
 
int main()
{
        size_t n;
        puts("Input n: ");
        scanf("%u", &n);
        printf("Calculating with `while' loop: %llu\n", fact_while(n));
        printf("Calculating with recursion: %llu\n", fact_rec(n));
        system("pause");
        exit(0);
}
 
udouble_t fact_while(size_t n)
{
        udouble_t result = 1;
        while(n)
                result *= n--;
        return result;
}
 
udouble_t fact_rec(size_t n)
{
        return n ? n * fact_rec(n - 1) : 1;
}
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.12.2012, 11:27 14
elena3, Язык? Ваш код написан на Си...
0
0 / 0 / 0
Регистрация: 08.12.2012
Сообщений: 5
11.12.2012, 17:18  [ТС] 15
Цитата Сообщение от ForEveR Посмотреть сообщение
elena3, Язык? Ваш код написан на Си...
нет, на Microsoft Visual Studio
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
11.12.2012, 17:29 16
Цитата Сообщение от elena3 Посмотреть сообщение
Microsoft Visual Studio
MSVS - это IDE, а C - это язык программирования
0
0 / 0 / 0
Регистрация: 08.12.2012
Сообщений: 5
15.01.2013, 13:40  [ТС] 17
Ребята, кого заинтересовала моя программа, скидываю вам её
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
86
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
#include <iostream> 
#include <string>
#include <fstream>
//#include "fl.h"
 
using namespace std;
 
 
void multiply(vector<int> &result, int number);
 
void multiply(vector<int> &result, int number) // функция для перемножения 2х чисел
                                               // записываем поразрядно в вектор: десятки сотни и так далее 
                                               // и увеличиваем размер вектора
                                               // пока последний элемент больше 9ки
                                               // (т.е. есть десятки сотни и все такое)
{
    transform(result.begin(), result.end(), result.begin(), bind2nd(multiplies<int>(), number));
    for(vector<int>::size_type i = 0; i < result.size() - 1; i++) 
    {
        result[i + 1] += result[i] / 10; 
        result[i] %= 10;
    }
    while(result.back() > 9) 
    {
        result.push_back(result.back() / 10); 
        result[result.size() - 2] %= 10; 
    }
}
int main()
{
    int n;
    char str[256]; 
    int a;
    cout << "Factorial. Choose a method of input a number to calculate factorial" << endl;
    
    for ( ; ; )
    {
        cout << "1. Type using keyboard" << endl;
        cout << "2. Read from file" << endl;
        cin >> a;
        if (a == 1)
        {
            cout << "Enter the number: " ;
            cin >> n;
            break;
        }   
        else if (a == 2)
        {
            ifstream fact1; 
            fact1.open("input.txt"); 
                fact1 >> str; //считали строку шз файла(до разделяющего символа)
                    sscanf(str, "%d", &n);  //Cчитали число из строки. 
                                            //Исходя из выбранного метода считывания 
                                            //не требуется "защита от дурака" на ввод 
                                            //дробных чисел, для которых, как следует 
                                            //из определения, факториал так же 
                                            //не определен
            fact1.close(); // закрыли файл
            break;
        }
        else
        {
            cout << "You entered wrong number. Retry" << endl;
        }
    }
    ofstream fact2;
    fact2.open("output.txt"); // открыли файл вывода
    fact2 << "Factorial " << n << " = " ; // записали результат (подготовка)
    cout << "Factorial " << n << " = " ;  // вывели результат на экран (подготовка)
 
    vector<int> result(1, 1); // создали интовый вектор
    for(n; n > 0; multiply(result, n--)); // перемножаем числа - собсна сам факториал
    transform(result.rbegin(), result.rend(), ostream_iterator<char>(fact2), bind2nd(plus<int>(), '0')); // записали основное число в файл
    transform(result.rbegin(), result.rend(), ostream_iterator<char>(cout), bind2nd(plus<int>(), '0')); // вывели основное число на экран
 
    fact2.close(); // закрыли файл
    
    cout << endl; // << "Press Enter to exit" << endl;
    system("pause");
 
    return 0;
}
напоминаю, она работает на Visual Studio 2008
0
15.01.2013, 13:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2013, 13:40
Помогаю со студенческими работами здесь

Написать программу для вычисления двойного факториала числа
2) написать программу для вычисления двойного факториала числа n!!=n*(n-2)*(n-4)*(n-6)... Число n...

Написать рекурсивную процедуру вычисления факториала целого положительного числа
Написать рекурсивную процедуру вычисления факториала целого положительного числа n

Написать программу для вычисления факториала числа с заданной точностью
Написать программу для вычисления факториала числа: n!=1*2*3*.....n. Использовать специальный...

С++ Найти m! + (m+n)!, создав процедуру для вычисления факториала произвольного натурального числа
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; void my_fact(int m, int n) { ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru