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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2011, 16:35   #1
crewww
Пользователь
 
Регистрация: 12.10.2011
Сообщений: 12
По умолчанию Факториал больших чисел

Требуется вычислить факториал целого числа N. Факториал обозначают как N! и вычисляют по формуле:
N! = 1 * 2 * 3 * … * (N-1) * N, причем 0! = 1.
Так же допустимо рекуррентное соотношение: N! = (N-1)! * N
Входные данные
В единственной строке входного файла INPUT.TXT записано одно целое неотрицательное число N (N < 1000).

Для вычисления факториалов порядка 10! 20! я знаю алгоритм
Код:
include <iostream>
using namespace std;
int main()
{double k; int i,n;
i=1;
cin>>n;
while (i<=n)
k=k*i;
cout<<k;
return 0;
}
но как реализовать так называемую "длинную арифметику"
если вам не трудно то дайте ключевую идею

Последний раз редактировалось Stilet; 22.10.2011 в 21:36.
crewww вне форума Ответить с цитированием
Старый 20.10.2011, 16:41   #2
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от crewww Посмотреть сообщение
Требуется вычислить факториал целого числа N. Факториал обозначают как N! и вычисляют по формуле:
N! = 1 * 2 * 3 * … * (N-1) * N, причем 0! = 1.
Так же допустимо рекуррентное соотношение: N! = (N-1)! * N
Входные данные
В единственной строке входного файла INPUT.TXT записано одно целое неотрицательное число N (N < 1000).

Для вычисления факториалов порядка 10! 20! я знаю алгоритм
include <iostream>
using namespace std;
int main()
{double k; int i,n;
i=1;
cin>>n;
while (i<=n)
k=k*i;
cout<<k;
return 0;
}
но как реализовать так называемую "длинную арифметику"
если вам не трудно то дайте ключевую идею
Ваш код не корректен, так как вы не инициализируете переменную k.
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 20.10.2011, 16:49   #3
crewww
Пользователь
 
Регистрация: 12.10.2011
Сообщений: 12
По умолчанию

Цитата:
Сообщение от crewww Посмотреть сообщение
Требуется вычислить факториал целого числа N. Факториал обозначают как N! и вычисляют по формуле:
N! = 1 * 2 * 3 * … * (N-1) * N, причем 0! = 1.
Так же допустимо рекуррентное соотношение: N! = (N-1)! * N
Входные данные
В единственной строке входного файла INPUT.TXT записано одно целое неотрицательное число N (N < 1000).

Для вычисления факториалов порядка 10! 20! я знаю алгоритм
include <iostream>
using namespace std;
int main()
{double k; int i,n;
k=1;
i=1;
cin>>n;
while (i<=n)
k=k*i;
cout<<k;
return 0;
}
но как реализовать так называемую "длинную арифметику"
если вам не трудно то дайте ключевую идею
теперь я подредактировал
crewww вне форума Ответить с цитированием
Старый 20.10.2011, 16:59   #4
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

недо реализовать умножение чисел вручную, т.е. столбиком.

допустим есть функция которая перемножает числа столбиком
Код:
string multipy(string v1, int v2);
//второй множитель как правило число способное уместиться в стандартном целочисленном типе. 
//можно переписать функцию так чтобы она принимала две строки
после чего надо будет переписать только одну строчку
Код:
string k; 
int i,n;
 i=1;
 cin>>n;
 while (i<=n)
 k=multipy(k, i);//меняем только одну строку
 cout<<k;
 return 0;
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 20.10.2011, 17:15   #5
crewww
Пользователь
 
Регистрация: 12.10.2011
Сообщений: 12
По умолчанию

Цитата:
Сообщение от haruhi Посмотреть сообщение
недо реализовать умножение чисел вручную, т.е. столбиком.

допустим есть функция которая перемножает числа столбиком
Код:
string multipy(string v1, int v2);
//второй множитель как правило число способное уместиться в стандартном целочисленном типе. 
//можно переписать функцию так чтобы она принимала две строки
после чего надо будет переписать только одну строчку
Код:
string k; 
int i,n;
 i=1;
 cin>>n;
 while (i<=n)
 k=multipy(k, i);//меняем только одну строку
 cout<<k;
 return 0;
а можно это сделать с помощью массива?
crewww вне форума Ответить с цитированием
Старый 20.10.2011, 20:59   #6
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Код:
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>

using namespace std;


void multiply(vector<int> &result, int number);


int main()
{
	int number;
	vector<int> result(1, 1);
	for(cin >> number; number > 0; multiply(result, number--));
	transform(result.rbegin(), result.rend(), ostream_iterator<char>(cout), bind2nd(plus<int>(), '0'));

	return 0;
}


void multiply(vector<int> &result, int number)
{
	transform(result.begin(), result.end(), result.begin(), bind2nd(multiplies<int>(), number));
	for(vector<int>::size_type i = 0; i < result.size() - 1; i++)
	{
		result[i + 1] += result[i] / 10;
		result[i] %= 10;
	}
	while(result.back() > 9)
	{
		result.push_back(result.back() / 10);
		result[result.size() - 2] %= 10;
	}
}
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 22.10.2011, 19:56   #7
crewww
Пользователь
 
Регистрация: 12.10.2011
Сообщений: 12
По умолчанию

все это отлично, но мои знания в C++ очень ограничены
crewww вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PIC16F84 (арифметика больших чисел) lawliet93 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 21.10.2011 12:18
Сложение больших чисел Plazma Общие вопросы C/C++ 0 27.11.2010 17:11
Умножение больших чисел Relrin Помощь студентам 13 22.10.2010 20:44
сложение больших чисел SacReD_89 Общие вопросы C/C++ 21 25.04.2010 16:42
С# Сложение больших чисел SL1CK Помощь студентам 4 23.11.2009 21:07