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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 51, средняя оценка - 4.88
!StUdEnT!
0 / 0 / 0
Регистрация: 14.05.2011
Сообщений: 6
#1

факториал в с++ - C++

21.05.2011, 13:39. Просмотров 6524. Ответов 34
Метки нет (Все метки)

Дано целое число N (>0). Вывести сумму 2 + 1/(2!) +1/(3!)+ ... + 1/(N!) Полученное число является приближеным значением константы е=ехр(1)(=2.71828183).
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2011, 13:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос факториал в с++ (C++):

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

С++ Факториал - C++
Надо написать программку на С++ которая вычисляет факториал числа n (факториал обозначается как n!). числа n в диапазоне от 1 до 12...

Факториал - C++
Здравствуйте Всем!!! Меня зовут Наталья. Помогите решить задание на С++: Дано натуральное число n; найти n!. Использовать программу,...

Факториал с++ - C++
1. Ввести n элементов одномерного массива; 2. Вычислить указанное выражение; 3. Вывести на экран значение указанного выражения.

Факториал - C++
Как написать программу для вычисления n факториал

Факториал - C++
Помогите написать программу: Составить функцию, которая вычисляет сумму К слагаемых. В вызывающей функции main() организовать контроль...

34
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.05.2011, 13:58 #2
Рекурсивная версия:
C++
1
2
3
4
5
6
7
8
__int64 factorial (int n)
{
 if (n==0)
 {
  return 1;
 }
 return factorial(n-1)*n;
}
, явно циклическая версия:
C++
1
2
3
4
5
6
7
8
9
__int64 factorial (int n)
{
 __int64 r;
 for (r=1; n!=0; --n)
 {
  r*=n;
 }
 return r;
}
. Рекурсивная версия есть наглядное пособие, как делать не надо, но работать будет и она, только тормознее и с перерасходом стека.
1
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
21.05.2011, 14:06 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Факториал можно вычислить на стадии компиляции
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
template<int n>
class Factorial {
public:
    static const int f = Factorial<n - 1>::f * n;
};
 
template<>
class Factorial<0> {
public:        
    static const int f = 1;
};
 
int main() {
    std::cout << Factorial<5>::f << std::endl; // 120
}
6
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
21.05.2011, 14:11 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
int main()
{
    double sum = 2., fact = 1.;
    int N;
    std::cin >> N;
    for (int i = 2; i <= N; i++)
    {
        fact /= i;
        sum += fact;
    }
    std::cout << sum << std::endl;
    return 0;
}
2
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.05.2011, 16:53 #5
Цитата Сообщение от gooseim Посмотреть сообщение
Факториал можно вычислить на стадии компиляции
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
template<int n>
class Factorial {
public:
    static const int f = Factorial<n - 1>::f * n;
};
 
template<>
class Factorial<0> {
public:        
    static const int f = 1;
};
 
int main() {
    std::cout << Factorial<5>::f << std::endl; // 120
}
хм...интересно было бы посмотреть на вычисление какой нибудь функции или решение ДУ таким методом)
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
23.05.2011, 05:44 #6
Цитата Сообщение от gooseim Посмотреть сообщение
Факториал можно вычислить на стадии компиляции
А если я напишу
C++
1
std::cout<<Factorial<999><<endl;
, то на стадии компиляции будет вычислена, а потом где то храниться вся тысяча факториалов?
0
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
23.05.2011, 10:33 #7
taras atavin, будет храниться только один факториал, который (999!) .
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.05.2011, 10:39 #8
Т.е. никого не смущает, что
999!
402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058 631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094 646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347 553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308 431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151 027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186 116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355 556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545 257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179 168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786 906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807 075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301 435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720 559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901 886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819 372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290 153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573 630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457 156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004 153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000
не влезет в int?
1
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
18.06.2011, 16:30 #9
Цитата Сообщение от gooseim Посмотреть сообщение
будет храниться только один факториал, который (999!) .
Нет. Все тысяча будут "храниться где-то", но только на этапе компиляции. (Если не учитывать невозможность его подсчёта)
1
Nesnakomez
0 / 0 / 0
Регистрация: 11.07.2009
Сообщений: 21
14.08.2011, 00:43 #10
подскажите, в чем проблема: вычисляю факториал с использованием рекурсии. Результат выдает верный до определенного момента. Если ввести число для вычисления факториала начиная с 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
#include "iostream"
using namespace std;
int factorial(int);
int num=1;
 
void main()
{
    
    int n;
    cout<< "Input a number" << endl;
    cin>> n;
    factorial(n);
}
 
int factorial(int n)
{
    if(n>=1)
    {
    num*=n;
    n--;
    factorial(n);
    }
    else
    cout<<num<<endl;    
    return num;
}
0
ValeryLaptev
Эксперт С++
1041 / 820 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
14.08.2011, 00:47 #11
Nesnakomez, результат просто не помещается в int.
Надо возвращать double
0
Nesnakomez
0 / 0 / 0
Регистрация: 11.07.2009
Сообщений: 21
14.08.2011, 00:51 #12
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Nesnakomez, результат просто не помещается в int.
Надо возвращать double
Пробовал, не помогает
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.08.2011, 00:51 #13
ValeryLaptev, зачем вещественный тип применять для факториала? Есть же long long.
0
ValeryLaptev
Эксперт С++
1041 / 820 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
14.08.2011, 00:53 #14
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
ValeryLaptev, зачем вещественный тип применять для факториала? Есть же long long.
Этого все равно не хватает.
Вы знаете, какой максимальный x! приводит к переполнению на 32-битном Intel?
Всего 1755! - и мы вылетаем даже при наличии long double.
0
Nesnakomez
0 / 0 / 0
Регистрация: 11.07.2009
Сообщений: 21
14.08.2011, 00:53 #15
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Есть же long long.
То же самое
у меня всего то 13!
дальше результаты то в плюс то в минус идут, еще и отрицательные результаты есть
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2011, 00:53
Привет! Вот еще темы с ответами:

факториал - C++
найти число нулей в конце факториала числа N по основанию каждого множителя K (1&lt;=N&lt;=1000000000, 2&lt;=K&lt;=1000) #include &lt;iostream&gt; ...

Факториал - C++
Пожалуйсто, помогите написать прогу на Си, которая вичисляла бы 100! (факториал) выводя всё на экран!

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

Факториал - C++
Дано натуральное число n; найти n!. Использовать программу, включающую рекурсивную процедуру вычисления n!


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

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

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