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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.84
Vexel
12 / 12 / 1
Регистрация: 18.10.2009
Сообщений: 159
#1

Вычисление факториала - C++

03.09.2010, 17:37. Просмотров 2747. Ответов 15
Метки нет (Все метки)

Помогите пожалуйста вычислить факториал:
0
Миниатюры
Вычисление факториала  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.09.2010, 17:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вычисление факториала (C++):

Вычисление факториала. - C++
Помогите пожалуйста решить задачу!! Язык С++ Дано натуральное число n. Написать программу, которая вычисляет факториал неотрицательных...

Вычисление факториала - C++
В одном задании я столкнулся с факториал b(итое)=i/(i!) восклицательный знак это факториал я понял а вот как его обьявить в языке c++...

Вычисление факториала - C++
Нужно заставить программу выводить результат, но почему то не получается #include <stdio.h> #include <conio.h> int f(int); ...

Вычисление факториала - C++
Написать программу, чтобы она циклически запрашивала ввод пользователем числа и считала его факториал до тех пор, пока пользователь не...

Вычисление факториала - C++
ребята помогите решить. составьте пожалуйста код!) а) (m+1)!

Вычисление факториала числа - C++
Маленькая программа вычисляет факториал числа, введенного пользователем, по формуле N! = N * (N – 1)!, где 0 != 1, и выводит его на экран. ...

15
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
03.09.2010, 17:41 #2
C++
1
2
3
4
5
6
7
8
9
10
int factorial(int i)
{
        if(i > 1)
                return i * factorial(i - 1);
        else   return i;
}
void main()
{
        cout << factorial(5);
}
c тернарным оператором красивше а это классика
0
Vexel
12 / 12 / 1
Регистрация: 18.10.2009
Сообщений: 159
03.09.2010, 17:47  [ТС] #3
Цитата Сообщение от bobromet Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
int factorial(int i)
{
        if(i > 1)
                return i * factorial(i - 1);
        else   return i;
}
void main()
{
        cout << factorial(5);
}
c тернарным оператором красивше а это классика
Ошибки были, уже исправил. А где вычисление самих иксов, возведение их в степень итд ? А то я вижу тут только факториал от знаменателя вы нашли и все.
0
neske
1501 / 868 / 84
Регистрация: 26.03.2010
Сообщений: 2,973
03.09.2010, 17:47 #4
Vexel, библиотеки подключите.
/facepalm
1
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
03.09.2010, 18:01 #5
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 <iostream>
#include <cmath>
 
unsigned long long int fact(int n)
{
   return (n>1)?n*fact(n-1):n;
}
 
double count(double x)
{
   double res=0;
   for(int i=1; i<=13; i+=2)
   {
      if(i==3||i==7)
      {
         res-=(pow(x, i)/fact(i));
      }
      else
         res+=(pow(x,i)/fact(i));
   }
   return res;
}
 
int main()
{
   double x;
   std::cout<<"Enter x: ";
   std::cin>>x;
   std::cout<< count(x) <<'\n';
   return 0;
}
0
Vexel
12 / 12 / 1
Регистрация: 18.10.2009
Сообщений: 159
03.09.2010, 18:05  [ТС] #6
Цитата Сообщение от Lavroff Посмотреть сообщение
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 <iostream>
#include <cmath>
 
unsigned long long int fact(int n)
{
   return (n>1)?n*fact(n-1):n;
}
 
double count(double x)
{
   double res=0;
   for(int i=1; i<=13; i+=2)
   {
      if(i==3||i==7)
      {
         res-=(pow(x, i)/fact(i));
      }
      else
         res+=(pow(x,i)/fact(i));
   }
   return res;
}
 
int main()
{
   double x;
   std::cout<<"Enter x: ";
   std::cin>>x;
   std::cout<< count(x) <<'\n';
   return 0;
}
Ошибку выдает cpp(4) : error C2632: 'long' followed by 'long' is illegal
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
03.09.2010, 18:09 #7
Vexel, Щет. Тогда просто long. Сек

Добавлено через 46 секунд
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 <iostream>
#include <cmath>
 
unsigned long int fact(int n)
{
   return (n>1)?n*fact(n-1):n;
}
 
double count(double x)
{
   double res=0;
   for(int i=1; i<=13; i+=2)
   {
      if(i==3||i==7)
      {
         res-=(pow(x, i)/fact(i));
      }
      else
         res+=(pow(x,i)/fact(i));
   }
   return res;
}
 
int main()
{
   double x;
   std::cout<<"Enter x: ";
   std::cin>>x;
   std::cout<< count(x) <<'\n';
   return 0;
}
1
HIMen
4137 / 1386 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
03.09.2010, 18:10 #8
Vexel, компилятор выпрями
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
03.09.2010, 18:12 #9
Но лучше действительно выпрямить компиль. 13! может не влезть в unsigned long, хотя у меня влезает. Проверяйте на своем
0
neske
1501 / 868 / 84
Регистрация: 26.03.2010
Сообщений: 2,973
03.09.2010, 18:14 #10
Lavroff, у вас ошибка. Переменная res сначала должна ровняться переменной X.

Мой вариант, может-быть есть ошибка, делал быстро:

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
#include <iostream>
#include <cmath>
 
typedef unsigned long long ull;
ull factorial(int n)
{
    return (n>1) ? n*factorial (n-1) : n;
}
 
double func (double X)
{
    const int operations[]={0, 1, 0, 1, 1, 1}; // 0 - , 1 +-
    int cnt=0;
 
    const double copy_x=X;
    for (size_t i=3; i<=13; i+=2)
    {
        operations [cnt++] ? (X+=pow (copy_x, i) / factorial (i))
                           : (X-=pow (copy_x, i) / factorial (i));
    }
 
    return X;
}
 
int main (void)
{
    double X;
    std::cout << "Input X: ";
    std::cin >> X;
 
    std::cout << "X=" << func (X);
    std::cout << std::endl;
 
    return 0;
}
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
03.09.2010, 18:15 #11
neske, М. А в чем ошибка-то?) Первая степень x это что?)

Чему равен res после 1-ой итерации?)

C++
1
2
3
4
5
6
7
8
9
for(int i=1; i<=13; i+=2)
   {
      if(i==3||i==7)
      {
         res-=(pow(x, i)/fact(i));
      }
      else
         res+=(pow(x,i)/fact(i));
   }
0
neske
1501 / 868 / 84
Регистрация: 26.03.2010
Сообщений: 2,973
03.09.2010, 18:18 #12
Lavroff, этого не углядел, прошу прощения.
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
03.09.2010, 18:20 #13
neske, На тему ошибок в вашем коде. Их нет. Кроме одной.

C++
1
for (size_t i=3; i<=13; i+=2)
size_t зря. у pow нету перегрузки с size_t. Лучше int.
1
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
03.09.2010, 18:22 #14
Эххх, и все через рекурсию...
C
1
2
3
4
5
6
7
8
9
10
11
12
int myfactorial(int n)
{
    int result;
    
    if (n == 0 || n == 1)
        return 1;
    
    for (result = 1; n > 1; n--)
        result *= n;
    
    return result;
}
0
neske
1501 / 868 / 84
Регистрация: 26.03.2010
Сообщений: 2,973
03.09.2010, 18:22 #15
Понятно, спасибо.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2010, 18:22
Привет! Вот еще темы с ответами:

Вычисление двойного факториала - C++
Помогите пожалуйста не как не пойму, само задание: Вычисление двойного факториала числа n!!=n*(n-2)*(n-4)*(n-6) и тд... Число n вводится с...

Вычисление факториала числа N - C++
Что надо написать в пропущенной строке? setlocale(LC_ALL, &quot;Russian&quot;); int N; int P=1; cout&lt;&lt;&quot;Input N: &quot;; cin&gt;&gt;N; ...

Ввод и вычисление факториала. - C++
Помогите пожалуйста. Надо написать консольное приложение, При запуске программа просит ввести число, а после выводит его на экран. Всем...

Вычисление факториала через for - C++
Помогите что-то не могу правильно написать код, кто может подсказать через цикл for , что-то похоже на этот код #include &lt;iostream&gt; ...


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

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

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