求10000以内n的阶乘

    经过我N天的努力,终于把大整数的阶乘的一个算法看懂了!什么智商嘛,打击死我自己了。什么是大整数的阶乘呢,就是结果无论用C++语言中的哪一种数据类型都不能保存的。既然不能用一种数据类型保存,那么只能想其他的办法保存了。呵呵,就像~~~于是,我们自然而然的想到了用数组来保存数字。建立一个int的数组。因为int的最大数为2147483647,理论上就算是算到214748364的阶乘也是没有问题的。因为214748364乘9肯定小于2147483647嘛!呵呵,不过我在笔记本上试了,算1000的阶乘的时候一下就出来了,算10000的阶乘的时候就很慢了,要等待几秒钟才可以,呵呵,我的笔记本的主频是2.0 GHz,内存是1G,如果真要算2147483647的阶乘,还真不知道要等多久,而且网上算了,因为n!小于(n+1)/2 的n的次方。用一个数组元素储存一个数字,那么开辟的数组要能储存n*log10((n+1)/2)个数。我的天啊,这要多大的内存啊!不过不要紧,如果真要算很大的数字,我们当然只会开辟一个动态数组啦。呵呵,下面是我在网上找的一种算法,虽然算法效率不是很高,但至少比网上有只写四行代码就可以算到200000的阶乘要好理解。先看我找的代码吧,这个估计是最容易懂的算法了,呵呵!

#include   
using namespace std; 
void main()  
{  
  int result[40000]; //保存结算结果的数组   
  int height = 1;  //结果的最高位   
  int num;  //计算阶乘的数字   
  cin>>num;   
  result[0] = 1;  
  for (int i=1;i<=num;i++)  
  {  
    int res = 0; //进位   
    for (int j=0;j=0;k--)  
  {  
     cout<

你可能感兴趣的:(C++,c++)