Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.99/92: Рейтинг темы: голосов - 92, средняя оценка - 4.99
12 / 12 / 2
Регистрация: 18.10.2009
Сообщений: 158
1

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

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

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста вычислить факториал:
Миниатюры
Вычисление факториала  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.09.2010, 17:37
Ответы с готовыми решениями:

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

Вычисление факториала
Нужно заставить программу выводить результат, но почему то не получается #include <stdio.h>...

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

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

15
25 / 25 / 3
Регистрация: 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
12 / 12 / 2
Регистрация: 18.10.2009
Сообщений: 158
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
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
03.09.2010, 17:47 4
Vexel, библиотеки подключите.
/facepalm
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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
12 / 12 / 2
Регистрация: 18.10.2009
Сообщений: 158
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
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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
4337 / 1506 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
03.09.2010, 18:10 8
Vexel, компилятор выпрями
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
03.09.2010, 18:12 9
Но лучше действительно выпрямить компиль. 13! может не влезть в unsigned long, хотя у меня влезает. Проверяйте на своем
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
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
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
03.09.2010, 18:18 12
Lavroff, этого не углядел, прошу прощения.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
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
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
03.09.2010, 18:22 15
Понятно, спасибо.
0
bobromet
03.09.2010, 19:41     Вычисление факториала
  #16

Не по теме:

Цитата Сообщение от Vexel Посмотреть сообщение
А где вычисление самих иксов, возведение их в степень итд ? А то я вижу тут только факториал от знаменателя вы нашли и все.
Тема называется «числовые ряды »? Нет. «Ряд Тейлора/Маклорена» ? Тоже нет. Тема называется «вычислить факториал». С тем же успехом можно было назвать «операция сложения/деления/дроби и т.д.». Я еще понимаю был бы выложен код который неработает, типа нужна помощь, было бы понятно что надо. А так.. просто запостил задачу, через часик скопировал решение, раздал спасибы. А смысл?

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.09.2010, 19:41

Вычисление факториала
Написать функцию, которая возвращает факториал числа. Значение 0! принять равным 1 (0!=1!=1). Не...

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

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

Вычисление факториала числа
Надо написать программку на С++ которая вычисляет факториал числа n (факториал обозначается как...


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

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