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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
Киря1
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 3
11.04.2010, 15:26     факториал числа. я начинающий #1
Нужно создать функцию для вычисления факториала числа. Чтобы числа вводить с клавиатуры и предусмотреть возможность многократных расчетов с различными данными в С++ помогите плиз
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2010, 15:26     факториал числа. я начинающий
Посмотрите здесь:

C++ факториал макс. числа
C++ Факториал числа
Факториал числа C++
Как сравнить числа.(начинающий) C++
C++ факториал числа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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;
}
DEUCE
 Аватар для 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);}
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
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;
}
taras atavin
Ушёл с форума.
 Аватар для 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;
}
.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
12.04.2010, 10:02     факториал числа. я начинающий #6
taras atavin, а чем while так плох? Собственно вы допустили небольшую ошибку в форе
C++
1
for (f=1, i=fact; i>1; --i)
Смысла на 1 умножать нету
Киря1
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 3
13.04.2010, 16:23  [ТС]     факториал числа. я начинающий #7
всем спасибо!)
работает нормально, тока почему-то числа после 23 рассчитывает в минус и после 34 ответ 0 пишет, я на это забил (ограничение поставил)
romex
 Аватар для romex
44 / 44 / 4
Регистрация: 11.04.2010
Сообщений: 223
13.04.2010, 16:40     факториал числа. я начинающий #8
Цитата Сообщение от Киря1 Посмотреть сообщение
всем спасибо!)
работает нормально, тока почему-то числа после 23 рассчитывает в минус и после 34 ответ 0 пишет, я на это забил (ограничение поставил)
Происходит переполнение. 40! ни одна машина в мире не посчитает... Минус потому что в старший бит (отвечающий за знак) встает единица. Удивительно, что у вас не произошла ошибка...
insideone
Модератор
Автор FAQ
 Аватар для insideone
3623 / 901 / 48
Регистрация: 10.01.2010
Сообщений: 2,429
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! сдулся
romex
 Аватар для romex
44 / 44 / 4
Регистрация: 11.04.2010
Сообщений: 223
13.04.2010, 18:42     факториал числа. я начинающий #10
Хмм, виноват...
Поправлюсь:40! Ни один карманный микрокалькулятор не посчитает.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
13.04.2010, 18:54     факториал числа. я начинающий #11
insideone, с точностью до 1 для типа int - 13! дальше идет переполнение

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

Не по теме:

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

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

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

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

Добавлено через 2 минуты
Кстати, можно сделать арифметику 1024 бит на число и считать 170! с точностью до 1.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2010, 10:45     факториал числа. я начинающий
Еще ссылки по теме:

Факториал числа C++
C++ Факториал числа с рекурсией
C++ Факториал натурального числа

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

Или воспользуйтесь поиском по форуму:
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
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! и это не предел
Yandex
Объявления
14.04.2010, 10:45     факториал числа. я начинающий
Ответ Создать тему
Опции темы

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