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

Вычислить факториал натурального числа n из отрезка [1;20] - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.63
НикНик
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 14
26.06.2012, 23:20     Вычислить факториал натурального числа n из отрезка [1;20] #1
Создайте программу, вычисляющую факториал натурального числа n из отрезка [1;20], которое пользователь введёт с клавиатуры. Если число будет введено некорректно, то программа должна сообщить об ошибке. Например, если пользователь ввёл 4, то программа должна вывести 24; если пользователь ввёл -1, то программа должна вывести «ошибка при вводе».
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2012, 23:20     Вычислить факториал натурального числа n из отрезка [1;20]
Посмотрите здесь:

C++ Для заданного натурального числа N вычислить и вывести на экран
C++ Циклы.Вычислить Факториал числа.
C++ вычислить факториал числа n, где n вводисться с клавиатуры. n! = 1 * 2 * 3 *...* n
Для заданного натурального числа n и действительных чисел x0 и A вычислить Xn, по итерационной формуле: C++
Вычислить для данного натурального числа C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
27.06.2012, 15:21     Вычислить факториал натурального числа n из отрезка [1;20] #21
Цитата Сообщение от MrGluck Посмотреть сообщение
-=ЮрА=-, все равно далеко уйти не выйдет,
Код C++
1
setprecision(20)
Все упрется.
- что значит упрётся?
C++
1
2
3
4
5
else
        if(value < 1 /*|| 20 < value*/)
            cout<<"Entered value not from diapazone [1;20]\n";
        else
        {
Миниатюры
Вычислить факториал натурального числа n из отрезка [1;20]  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
27.06.2012, 15:23
  #22

Не по теме:

Если хотим пропечатать побольше ноликов то делаем setprecision(2*value) и всё, вообще не понял что имелось ввиду под словами упрётся...

CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
27.06.2012, 15:27     Вычислить факториал натурального числа n из отрезка [1;20] #23
К сожалению, при вычислении факториала как double проблема очень-очень быстро возникнет в точности вычисления:
Iteration : 23
23! =
Double 25852016738884978212864
Really 25852016738884976640000
-=ЮрА=-
Заблокирован
Автор FAQ
27.06.2012, 15:38     Вычислить факториал натурального числа n из отрезка [1;20] #24
Так ребята что вам не так считается???Хватит обсасывать эту тему, с учётом всех замечений по поводу точности (о которой уже раза 4-ри сказал - НАДО double) а также замечений касательно числа выводимых разрядов с помощью setprecision
Компилируем код ниже и заканчиваем дискусию которая лично меня уже злит
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
#include <iomanip>
#include <iostream>
using namespace std;
 
int main()
{
    int i, value;
    double fact;
    while(true)
    {
        fact = 1;
        cout<<"Enter number [1;20] : ";
        if(!(cin>>value) || cin.get() != '\n')
        {
            cin.clear();
            cin.sync();
            cout<<"Bad input\n";
        }
        else
        if(value < 1 /*|| 20 < value*/)
            cout<<"Entered value not from diapazone [1;20]\n";
        else
        {
            for(i = 1; i <= value; i++)
                cout<<"Iteration : "<<i<<endl
                <<i<<" != "<<setprecision(2*value)
                <<(fact = fact*i)<<endl;
        }
    }
    return 0;
}
CheshireCat, как ты получил такой резульатат double???
Цитата Сообщение от CheshireCat Посмотреть сообщение
Double 25852016738884978212864
Миниатюры
Вычислить факториал натурального числа n из отрезка [1;20]   Вычислить факториал натурального числа n из отрезка [1;20]  
CheshireCat
27.06.2012, 15:44
  #25

Не по теме:

-=ЮрА=- : Это GCC 4.7, с другими компиляторами не экспериментировал - лень.... уверен, проблема все равно проявится - не раньше, так позже.

-=ЮрА=-
27.06.2012, 15:58
  #26

Не по теме:

Цитата Сообщение от CheshireCat Посмотреть сообщение
-=ЮрА=- : Это GCC 4.7, с другими компиляторами не экспериментировал - лень.... уверен, проблема все равно проявится - не раньше, так позже.
вот тест для 150!
Код этот (в принципе ничего не менял)
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
#include <iomanip>
#include <iostream>
using namespace std;
 
int main()
{
    int i, value;
    double fact;
    while(true)
    {
        fact = 1;
        cout<<"Enter number: ";
        if(!(cin>>value) || cin.get() != '\n')
        {
            cin.clear();
            cin.sync();
            cout<<"Bad input\n";
        }
        else
        if(value < 0)
            cout<<"Entered value must be positive \n";
        else
        {
            for(i = 1; i < value; i++)
                cout<<"Iteration : "<<i<<endl
                <<i<<" != "<<setprecision(2*value)
                <<(fact = fact*i)<<endl;
            cout<<value<<" != "<<setprecision(2*value)
                <<(fact = fact*i)<<endl;
        }
    }
    return 0;
}

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2012, 16:09     Вычислить факториал натурального числа n из отрезка [1;20]
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
CheshireCat
27.06.2012, 16:09     Вычислить факториал натурального числа n из отрезка [1;20]
  #27

Не по теме:

Гм. Врет-с....
150! =
571338395644585459047893286526105400318955357860112641825483758331798291248453983931265744886753111453771078787468542041
626662501986845044663559491959220665749425920957357789293253572904449624724054167907221184454371222696755200000000000000
00000000000000000000000

Что и неудивительно, т.к. точность числа double - 15 (ну, 16....) десятичных цифр - определена std::numeric_limits<double>::digits10.

Yandex
Объявления
27.06.2012, 16:09     Вычислить факториал натурального числа n из отрезка [1;20]
Ответ Создать тему
Опции темы

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