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

Вычислить факториал 100! - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 45, средняя оценка - 4.91
MasterRO
37 / 5 / 3
Регистрация: 15.09.2011
Сообщений: 73
11.10.2012, 20:02     Вычислить факториал 100! #1
Необходимо вычислить факториал 100! и представить его в виде массива из 158 элементов, один элемент - 1 цифра числа. Само число очень большое и в целочисельные типы данных не помещается. Как быть??? Подскажите, пожалуйста.

Вот моя прога, которая работает только до 9!

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
// Факториал 100.cpp: определяет точку входа для консольного приложения.
//
 
 
#include "stdafx.h"
#include <iostream>
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    double p=1; 
 
    //Вычисляем факториал
    for(int i=1; i<10; i++)
    {
        p*=i; cout<<p<<" ";
    }
     int k=0; cout<<endl;
 
    //Считаем количество цифр
 
    while (p>1)
    {k++; p/=10; cout<<k<<"  ";}
    cout<<endl;
 
    //Разбиваем число на массив десятичных цифр
    double d[158]; int c=k;
    for(int i=0; i<=k; i++)
    {   p*=10;
        cout<<"p="<<p<<" ";
        d[i]=floor(p);
        cout<<"d_"<<i<<"="<<d[i]<<" ";
        p-=int(p);
    }
    cout<<endl; cout<<endl; cout<<endl; cout<<endl;
    //Вывод получившейся последовательности
    for(int i=0; i<k; i++)
        cout<<d[i]<<" ";
    cout<<endl;
    system("pause");
    return 0;
}
    setlocale(LC_ALL, "Russian");
    double p=1; 
 
    //Вычисляем факториал
    for(int i=1; i<10; i++)
    {p*=i; //cout<<p<<" ";}
     int k=0; //cout<<endl;
 
    //Считаем количество цифр
 
    while (p>1)
    {k++; p/=10; cout<<k<<"  ";}
    cout<<endl;
 
    //Разбиваем число на массив десятичных цифр
    double d[158]; int c=k;
    for(int i=0; i<=k; i++)
    {   p*=10;
        //cout<<"p="<<p<<" ";
        d[i]=floor(p);
        //cout<<"d_"<<i<<"="<<d[i]<<" ";
        p-=int(p);
    }
    cout<<endl; cout<<endl; cout<<endl; cout<<endl;
    //Вывод получившейся последовательности
    for(int i=0; i<k; i++)
        cout<<d[i]<<" ";
    cout<<endl;
    system("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Евгений89
 Аватар для Евгений89
99 / 99 / 9
Регистрация: 17.04.2011
Сообщений: 554
Завершенные тесты: 2
11.10.2012, 20:15     Вычислить факториал 100! #2
for(int i=1; i<10; i++) поставь i<=10 вудет до 10 работать))))
MasterRO
37 / 5 / 3
Регистрация: 15.09.2011
Сообщений: 73
11.10.2012, 20:16  [ТС]     Вычислить факториал 100! #3
Хотя нет.....программа выводит корректно 41!, а далее начинается каша. В чем причина?? Как это можно исправить?
MasterRO
37 / 5 / 3
Регистрация: 15.09.2011
Сообщений: 73
11.10.2012, 20:18  [ТС]     Вычислить факториал 100! #4
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
// Факториал 100.cpp: определяет точку входа для консольного приложения.
//
 
 
#include "stdafx.h"
#include <iostream>
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    double p=1; 
 
    //Вычисляем факториал
    for(int i=1; i<=41; i++)
    {
        p*=i; //cout<<p<<" ";
    }
     int k=0; cout<<endl;
 
    //Считаем количество цифр
 
    while (p>1)
    {
        k++; p/=10; //cout<<k<<"  ";
    }
    cout<<endl;
 
    //Разбиваем число на массив десятичных цифр
    double d[158]; int c=k;
    for(int i=0; i<=k; i++)
    {   p*=10;
        //cout<<"p="<<p<<" ";
        d[i]=floor(p);
        //cout<<"d_"<<i<<"="<<d[i]<<" ";
        p-=int(p);
    }
    cout<<endl; cout<<endl; cout<<endl; cout<<endl;
    //Вывод получившейся последовательности
    for(int i=0; i<k; i++)
        cout<<d[i]<<" ";
    cout<<endl;
    system("pause");
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от Евгений89 Посмотреть сообщение
for(int i=1; i<10; i++) поставь i<=10 вудет до 10 работать))))
Проблема именно в большом размере числа скорее всего.....
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.10.2012, 20:21     Вычислить факториал 100! #5
Вывести факториал числа
Евгений89
 Аватар для Евгений89
99 / 99 / 9
Регистрация: 17.04.2011
Сообщений: 554
Завершенные тесты: 2
11.10.2012, 20:21     Вычислить факториал 100! #6
а если попробывать через символ новой строки\n пусть в столбик выводит
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.10.2012, 20:22     Вычислить факториал 100! #7
без длинной арифметики никак
100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
Евгений89
 Аватар для Евгений89
99 / 99 / 9
Регистрация: 17.04.2011
Сообщений: 554
Завершенные тесты: 2
11.10.2012, 20:24     Вычислить факториал 100! #8
жесть
MasterRO
37 / 5 / 3
Регистрация: 15.09.2011
Сообщений: 73
11.10.2012, 20:25  [ТС]     Вычислить факториал 100! #9
Цитата Сообщение от Thinker Посмотреть сообщение
без длинной арифметики никак
100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
Проблема в том, что я с длинной арифметикой не знаком, нас совсем другому учили...
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.10.2012, 20:27     Вычислить факториал 100! #10
берите хороший вариант от diagon, а иначе никак, здесь стандартные типы не подойдут
MasterRO
37 / 5 / 3
Регистрация: 15.09.2011
Сообщений: 73
11.10.2012, 20:31  [ТС]     Вычислить факториал 100! #11
Цитата Сообщение от Thinker Посмотреть сообщение
берите хороший вариант от diagon, а иначе никак, здесь стандартные типы не подойдут
Спасибо конечно, но я в его коде ничего не пойму. Может со временем научусь и этому, а пока, если без длинной арифметики никак, обойдусь и тем что имею)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2012, 20:42     Вычислить факториал 100!
Еще ссылки по теме:

Вычислить факториал числа через оператор do while C++
Вычислить факториал заданного целого числа C++

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

Или воспользуйтесь поиском по форуму:
rinat_w
89 / 85 / 4
Регистрация: 13.11.2011
Сообщений: 183
11.10.2012, 20:42     Вычислить факториал 100! #12
я немного опоздал, но вот мое решение :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
string mult(string x, int y){
       int add=0, t;
       string result="";
       for (int i=x.size()-1; i>=0; i--){
           t=int(x[i]-'0')*y+add;
           add=t/10;
           result=char(t%10+'0')+result;
       }
       if (add!=0) result=char(add%10+'0')+result;
       if (add>9) result=char(add/10+'0')+result;
       return result;
}
int main(){
    int n;
    string str="1";
    cin>>n;
    for (int i=2; i<=n; i++) str=mult(str, i);
    cout<<str<<endl;
    system("pause");
    return 0;
}
Yandex
Объявления
11.10.2012, 20:42     Вычислить факториал 100!
Ответ Создать тему
Опции темы

Текущее время: 04:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru