下载本文所附源代码
可能很多人都曾经想过要实现一些比较大的数的阶乘,但是C++中提供的标准数据类型其存储空间太小,根本无法实现。我们可以通过其他方法来实现,本程序用一个很简单的算法实现数的阶乘,程序很短,也很简单,各处都有注释,相信大家很容易就可以看懂,下载源码后在VC6.0中打开编译后即可运行,程序经少许改动可以实现更大的数的阶乘,有兴趣的读者在看完本程序后可一动手试试,其乐无穷!!希望这个程序能给大家一点帮助。程序可能还有许多不足之出,热烈欢迎各位前来指导。在下在此表示衷心的感谢!!!!!
>> 本文固定链接: http://www.vcgood.com/archives/1018
我看了半天也没看懂,郁闷.只好自已经重写一个.
#include<iostream.h>
void fact(int *s, int n)
{
int i = 1;
int j = 1;
int up = 0;
for (j=1; j<=n; j++)
{
for (i=0; i<2*n; i++)
{
s [i] *= j;
}
for (i=n*2; i>0; i–)
{
if (s[i]>9)
{
up = s[i] / 10;
s [i] %= 10;
s [i-1] += up;
}
}
}
}
void main()
{
int n = 0;
int i = 0;
int j = 0;
cout << “输入一个正数:” << endl;
cin >> n;
if (n<0)
{
cout << “数值有误!” << endl;
return;
}
else if (n == 0)
{
cout << “0!==1″ << endl;
return;
}
int *s = new int[n*2];
for (i=0; i<n*2; i++)
{
s[i] =0;
}
s[n*2-1] = 1;
fact(s,n);
for (i=j; i<n*2; i++)
{
cout << s[i];
}
cout << endl;
}
不过,这个程序也有一个问题,如果数值太大了,超过了某一个值(具体多大我也不知道),程序就会出错.当然,如果把分配内存的值改大,这个最大值也会变大,但是这个问题却避免不了.