阶乘往往由于数值巨大而无法用一个long int或者double类型数据保存。近日无聊写了个大数值阶乘的计算函数,理论上只要内存足够,能够计算出任何数值的阶乘,但实际上100万以上的阶乘计算不管是时间消耗还是内存消耗都是极为惊人的,建议使用该函数计算100万以下的阶乘。
为了有足够的空间保存结果,用一个vector<unsigned long int>保存,每个unsigned long int保存8位结果,vector大小由结果位数决定。本程序主体主要包含两个函数,阶乘计算函数和结果显示函数,定义在Factorial.h中。
代码如下:
测试代码main.cpp:
经过测试,10万的阶乘计算时间为274489ms,即4分34秒。这个速度受电脑配置影响,这是在E5300,2G DDRII 800的硬件条件下测试出来的。
下面是测试结果图:
小数阶乘:
1000阶乘:
下面是系统计算机计算1000!的阶乘结果:
1万大数阶乘,耗时1529毫秒:
10万大数阶乘:
该函数计算阶乘速度不算很快,还有很大的改进空间。