Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2011, 22:35   #1
sp.caster
Пользователь
 
Регистрация: 29.01.2009
Сообщений: 60
По умолчанию факториал в с++

Всем привет, задание такое у меня, написать программу считающее факториал какого-то числа n ( 1<=n<=20).
Вроде написал программку и даже работает, но на каком то месте перестает правильно считать, т.е. счет уходит в минус. Может кто поведает юному юзеру в чем проблема?
Код:
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
	freopen("test.in", "r", stdin);
	freopen("test.out", "w",stdout);
	int i, n;
	long fact;
    fact=1;
	cin>>n;
	for (i=1; i<=n; i++)
	{ 
		fact = fact*i;
	}
	printf("%d", fact);
	return 0;
}
sp.caster вне форума Ответить с цитированием
Старый 01.04.2011, 22:37   #2
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

переполнение скорее всего происходит целочисленного типа, используй unsigned long long
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 02.04.2011, 06:36   #3
sp.caster
Пользователь
 
Регистрация: 29.01.2009
Сообщений: 60
По умолчанию

да вообщем то я тоже так думаю, подправил программу как ты посоветовал, т.е. взял под unsigned long long свой fact, ну и в общем то ничего к сожалению не изменилось
sp.caster вне форума Ответить с цитированием
Старый 02.04.2011, 09:09   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,724
По умолчанию

А в принтфе спецификатор поменяли?
p51x вне форума Ответить с цитированием
Старый 02.04.2011, 09:59   #5
sp.caster
Пользователь
 
Регистрация: 29.01.2009
Сообщений: 60
По умолчанию

э-э-э-э, что, что? Немного понятнее пожалуйста можно?=)
sp.caster вне форума Ответить с цитированием
Старый 02.04.2011, 10:31   #6
crazy horse
ios developer
Старожил
 
Аватар для crazy horse
 
Регистрация: 16.11.2007
Сообщений: 2,885
По умолчанию

Мне кажется, что такие вещи как факториал умнее считать рекурсией, цикл тут не нужен. Почти наверняка и задание по этой теме. А по теме - у тебя в n получается неявное преобразование char в int, чтож ты хотел-то. Преобразуй и проверяй всегда принадлежность n к заданному промежутку, чтоб в такие ситуевины не попадать.
Зы. а почему ввод через cin, а вывод не через cout?
Переполнение long на факториале 20? Ну ну...
Делайте что хотите, но чтобы через полчаса в лесу было светло, сухо и медведь!

Последний раз редактировалось crazy horse; 02.04.2011 в 10:37.
crazy horse вне форума Ответить с цитированием
Старый 02.04.2011, 10:46   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,724
По умолчанию

"%d" - спецификатор формата для принтфа и подобных функций
читате доки для разнообразия что ли
p51x вне форума Ответить с цитированием
Старый 02.04.2011, 13:15   #8
sp.caster
Пользователь
 
Регистрация: 29.01.2009
Сообщений: 60
По умолчанию

спасибо за замечания
sp.caster вне форума Ответить с цитированием
Старый 03.04.2011, 10:40   #9
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

Код:
#include <stdio.h>

#define N 20

unsigned long long F(const unsigned char n) {
  if (n == 0)
    return 1;
  else
    return n * F(n - 1);
}

int main(void) {
  unsigned long long
    fact = 0;
    
  fact = F(N);

  printf("factorial %u: %llu", N, fact);
  //---
  printf("\n\n\tPress any key for exit...");
  flushall();
  getchar();
  return 0;
};
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Факториал Radiy Общие вопросы Delphi 5 02.07.2010 08:26
Факториал Dracula777 Помощь студентам 4 26.02.2010 22:56
C++ (факториал) slim>>> Помощь студентам 2 13.01.2010 20:34
Факториал. dimka660i Помощь студентам 11 10.10.2009 23:28
факториал в си++ Sjava Помощь студентам 1 21.12.2008 12:17