对于大数的阶乘,毫无疑问,需要借助其他的数据结构来进行辅助存储。比如可用字符串或者整形数组来辅助存储。
而我们需要的就是设计一个简单的乘法器就行了,下面是用数组存储来实现的。
#include <iostream>
using namespace std;
int bigArray[20000]; //用来存储结果的数组
int bigFactorial(int n)
{
int tag = 0; //进位标志
int digit = 1; //位数
int temp; //临时结果
bigArray[0] = 1; //初始化第一位为1
for(int i = 2;i < n;i++)
{
for(int j = 1;j <= digit;++j)
{
temp = bigArray[j - 1] * i + tag;
bigArray[j - 1] = temp % 10;
tag = temp / 10;
}
while(tag)
{
bigArray[(++digit) - 1] = tag % 10;
tag = tag / 10;
}
}
return digit;
}
int main()
{
int length = bigFactorial(1024);
for(int j = length - 1;j >= 0; j--)
{
cout<<bigArray[j];
}
cout<<endl;
return 0;
}
----------------------
用数组来存放的话,有个很大的问题就是无法确定位数,所以有时会很浪费空间。其实我们还可以用String来存储,
然后在使用时对于char用‘’-‘0’或者atoi函数的方式转成整数再计算。这里不再讨论。