您的位置:首页 > 编程语言 > C语言/C++

C++计算大数据阶层

2012-02-03 15:23 169 查看
这是上大学时老师出的一个问题,当时没做出来。

C++中,用普通的数据类型精确计算超过20的阶乘应该是不可能的。下面通过数组实现任意500以内的阶乘,如果计算更大的数,也可以实现,不过时间要久一些。

//以下是程序代码

#include <iostream>

using namespace std;

const int MAX = 10000;

template <class TypeName>

class Fact

{

public:

Fact(TypeName f) : Value(f)

{

for(int i=0; i<MAX; i++)

{

arr[i] = 0;

}

arr[MAX-1] = 1;

}

//计算阶乘

void Calc()

{

int i = 0;

int j = 0;

for(i=1; i<=Value; i++)

{

//计算阶乘

for(j=MAX-1; j>=GetTop(); j--)

{

arr[j] *= i;

}

//分离数据,使每个数据只有一位数

for(int j=MAX-1; j>=GetTop(); j--)

{

arr[j-1] += arr[j]/10;

arr[j] = arr[j]%10;

}

}

}

//打印结果

void Print()

{

for(int i=GetTop(); i<MAX; i++)

{

cout << arr[i];

}

cout << endl;

}

//返回当前数据顶部

int GetTop()

{

int nStart = MAX;

for(int i=0; i<MAX; i++)

{

if(arr[i] > 0)

{

nStart = i;

break;

}

}

return nStart;

}

private:

TypeName arr[MAX];

TypeName Value;

};

int main()

{

Fact<int> f(100);

f.Calc();

f.Print();

system("pause");

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐