给一个c++求n!(阶乘的算法)

来源:百度知道 编辑:UC知道 时间:2024/05/03 03:08:49
首先这个n的值要足够的大,至少上万的,可以的话有多种的编译方法,回答好的可追加分数!分数不会与好的答案有出入,包满意

代码有点不整洁,但是可以算到10000的阶乘。

#include <iostream>
#include <cmath>
using namespace std;

typedef unsigned long int LONG;

LONG Factorial(LONG n, double& m, LONG& ex)
{
if(n<=32) {
LONG res(1);
for(LONG i(1);i<=n;i++)
{
res*=i;
}
ex=0;
return res;
} else {
double res(1.0);
for(LONG i(1);i<=n;i++)
{
double N = i;
int p= (int)(log(res) / log(10.0));
p--;
if(p>1)
{
res /= (pow(10.0,p));
ex += p;
}
res*=N;
}
if(res>10)
{
int p= (int)(log(res) / log(10.0));
res /= (pow(10.0,p));
ex += p;
}
m=res;
LONG resn(0);
return resn;
}
}

int main()
{
LONG n(1);

while(n)
{
cout<<"Input n: ";
cin>>n;

LONG ex