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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
Киря1
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 3
#1

факториал числа. я начинающий - C++

11.04.2010, 15:26. Просмотров 2051. Ответов 14
Метки нет (Все метки)

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

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

Как сравнить числа.(начинающий) - C++
Как сравнить числа например: если введённое число больше 40 cout <<"неправильный ввод"<<endl; а если ведённое число меньше 40 сделать...

факториал числа - C++
Почему вместо факториала компилятор выводит число 1 #include<iostream> using namespace std; int main() { int number; cout <<...

факториал числа n - C++
Как сделать в данной программе так, что бы она высчитывала факториал лишь в диапазоне от 1 до 12. Заранее спасибо. #include <iostream> ...

Факториал числа - C++
Напишите функцию для нахождения факториала числа. Результат возвращайте через заголовок функции. Объясните, что означает вернуть...

Факториал числа - C++
Мне надо найти факториал числа 100 . Помогите пажалуста.

14
kirjushyk
60 / 22 / 2
Регистрация: 13.03.2010
Сообщений: 65
11.04.2010, 15:37 #2
C
1
2
3
4
int f(int x)
{
    return x?x*f(x-1):1;
}
1
DEUCE
7 / 7 / 2
Регистрация: 11.04.2010
Сообщений: 25
11.04.2010, 15:43 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include<iostream.h>
int f(int n)
{if (n==0) return 0;
else if (n==1) return 1;
else
return n?n*f(n-1):1;}
void main()
{int n;
cout<<"Please, enter n: ";
cin>>n;
cout<<"The result is ";
cout<< f(n);}
1
M128K145
Эксперт С++
8293 / 3513 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
11.04.2010, 19:27 #4
Киря1, рекурсия - худший способ, поэтому так
C++
1
2
3
4
5
6
7
int Factorial(int fact)
{
    int f = 1, i = 2;
    while(i <= fact)
        f *= i++;
    return f;
}
2
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.04.2010, 06:29 #5
Вайл тоже не лучший.
C++
1
2
3
4
5
6
7
8
9
int Factorial(int fact)
{
 int f, i;
 for (f=1, i=fact; i>0; --i)
 {
  f*=i;
 }
 return f;
}
.
1
M128K145
Эксперт С++
8293 / 3513 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
12.04.2010, 10:02 #6
taras atavin, а чем while так плох? Собственно вы допустили небольшую ошибку в форе
C++
1
for (f=1, i=fact; i>1; --i)
Смысла на 1 умножать нету
1
Киря1
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 3
13.04.2010, 16:23  [ТС] #7
всем спасибо!)
работает нормально, тока почему-то числа после 23 рассчитывает в минус и после 34 ответ 0 пишет, я на это забил (ограничение поставил)
0
romex
44 / 44 / 4
Регистрация: 11.04.2010
Сообщений: 223
13.04.2010, 16:40 #8
Цитата Сообщение от Киря1 Посмотреть сообщение
всем спасибо!)
работает нормально, тока почему-то числа после 23 рассчитывает в минус и после 34 ответ 0 пишет, я на это забил (ограничение поставил)
Происходит переполнение. 40! ни одна машина в мире не посчитает... Минус потому что в старший бит (отвечающий за знак) встает единица. Удивительно, что у вас не произошла ошибка...
0
insideone
Модератор
Автор FAQ
3642 / 921 / 50
Регистрация: 10.01.2010
Сообщений: 2,477
13.04.2010, 17:15 #9
Цитата Сообщение от romex Посмотреть сообщение
Происходит переполнение. 40! ни одна машина в мире не посчитает...
Мне показалось что это работает верно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
double fact(int number){
    double result = number;
    while (--number > 1)
    {
        result *= number;
        // Просто отображает ход расчета
        std::cout << "[" << number << "] " << result << std::endl;
    }
return result;
}
 
int main()
{ 
    double f40 = fact(40);
return 0;           
}
PS. После 170! сдулся
0
romex
44 / 44 / 4
Регистрация: 11.04.2010
Сообщений: 223
13.04.2010, 18:42 #10
Хмм, виноват...
Поправлюсь:40! Ни один карманный микрокалькулятор не посчитает.
0
M128K145
Эксперт С++
8293 / 3513 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
13.04.2010, 18:54 #11
insideone, с точностью до 1 для типа int - 13! дальше идет переполнение

А 170! для double - там идет большая потеря и все время округления, поэтому я не могу сказать что это посчитанный факториал
0
insideone
13.04.2010, 19:08
  #12

Не по теме:

M128K145, хм, действительно... впрочем для неточных расчетов все же можно думаю и так
Кстати забавно, но Гугл считает именно до 170! =

0
romex
44 / 44 / 4
Регистрация: 11.04.2010
Сообщений: 223
13.04.2010, 19:59 #13
Цитата Сообщение от M128K145 Посмотреть сообщение
insideone, с точностью до 1 для типа int - 13! дальше идет переполнение

А 170! для double - там идет большая потеря и все время округления, поэтому я не могу сказать что это посчитанный факториал
Извините, о каких округлениях идет речь?

Добавлено через 2 минуты
Хотя нет, осознал...
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.04.2010, 05:16 #14
Цитата Сообщение от romex Посмотреть сообщение
40!
Моя считает 170!

Добавлено через 2 минуты
Кстати, можно сделать арифметику 1024 бит на число и считать 170! с точностью до 1.
0
M128K145
Эксперт С++
8293 / 3513 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
14.04.2010, 10:45 #15
Цитата Сообщение от taras atavin Посмотреть сообщение
Моя считает 170!
Это в смысле вот это?
Цитата Сообщение от taras atavin Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
int Factorial(int fact)
{
 int f, i;
 for (f=1, i=fact; i>0; --i)
 {
  f*=i;
 }
 return f;
}
Если да - то максимум 13. А вообще речь идет о стандартный типах, потому как со своим типом я могу с точностью до единицы посчитать 100000! и это не предел
0
14.04.2010, 10:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2010, 10:45
Привет! Вот еще темы с ответами:

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

Рекурсия: факториал числа - C++
#include &lt;iostream&gt; using namespace std; int factorial(int n); int main() { cout &lt;&lt; &quot;at main&quot; &lt;&lt; endl; cout &lt;&lt;...

Факториал натурального числа - C++
Составить программу для расчёта факториала натурального числа n(факториал числа n равен 1,2...); В С++ДВУМЯ СПОСОБАМИ while и do while.

Факториал большого числа - C++
Доброго времени суток! Захотелось вычислить факториал большого числа. Наткнулся на gmp. Посмотрел это...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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