Vijay Vishwakarmar Ответов: 5

Программа для поиска факториала 10000 в c++


Есть ли какой-либо способ сохранить значение, которое превышает диапазон всех типов данных в C++?
Как запрограммировать сохранение результата факториала 10000

5 Ответов

Рейтинг:
38

Himansu sekhar bal

#include <iostream>
#include "bigint.h"
using namespace std;
int main()
{
    int i;
    int n = 69;
    RossiBigInt nfactorial(1);
    for (i = 2; i <= n; i++) {
        RossiBigInt bigi(i);
        nfactorial = nfactorial * bigi;
        cout << i << " factorial = " << nfactorial << endl;
    }
    return 0;
}


Для bigint пройдите по этой ссылке. http://groups.google.com/group/sources/msg/496e8d3ae812abbb[^]


Olivier Levrey

Мой 5. Я только что исправил теги для форматирования кода.

Рейтинг:
2

Sandeep Mewara

AFAIK, а не определенный тип данных - вам нужно будет разработать какой-то собственный метод. unsigned __int64 тип данных может хранить большие значения, но здесь этого все равно недостаточно.

Подобная дискуссия здесь[^] с некоторыми возможными способами.


Рейтинг:
1

Olivier Levrey

То, что вы хотите использовать, это Большое число класс или библиотека. Поищите в google, чтобы найти его. Например:
https://mattmccutchen.net/bigint/[^]


Рейтинг:
1

Niklas L

Я использую Библиотека Теории Чисел[^] для работы с большими целыми числами. Это хорошо работало для моих нужд.


Рейтинг:
0

Member 14343187

#include<stdio.h>
#include<iostream>
#include<algorithm>
#define forr(i,a,b) for(int i=(a);i<(b);++i)
#define forn(i,n) forr(i,0,n)
#define dforn(i,n) for(int i=n-1;i>=0;--i)
#define forall(it,v) for(auto it=v.begin();it!=v.end();++it)
#define fst first
#define snd second
#define sz(c) ((int)c.size())
#define MAXP 1000000
#define BASE 1000000
#define LMAX 10000
using namespace std;
typedef long long ll;


struct bint {
	int l;//LONGITUD
	ll n[LMAX];//EL NUMERO 
	bint(ll x = 0) {
		l = 1;
		forn(i, LMAX) {
			if (x) l = i + 1;
			n[i] = x % BASE;
			x /= BASE;

		}
	}
	void out() {
		cout << n[l - 1];
		dforn(i, l - 1) printf("%6.6llu", n[i]);
	}
	void invar() {
		fill(n + l, n + LMAX, 0);
		while (l > 1 && !n[l - 1]) l--;
	}
};
bint operator*(const bint & a, ll b) {
	bint c;
	ll q = 0;
	forn(i, a.l) q += a.n[i] * b, c.n[i] = q % BASE, q /= BASE;
	c.l = a.l;
	while (q) c.n[c.l++] = q % BASE, q /= BASE;
	c.invar();
	return c;
}
int main() {
	int n = 10000;
	bint res(1);
	for (int i = 1; i <= n; ++i) {
		res = res * i;
	}
	res.out();
}

Ahi esta Campeón, en programación competitiva este tipo de cosas son pan de cada día