关于大整数n!的问题!

对于一个整数n,当n超过30之后,n!将会是一个比较大的数,而longlong类型将不能存储下这么大的数·,这是你只能用到高精度的知识,运用数组来存放这些数,呵呵!!看看下面的例子吧!!

这是一道求1000!的例子,希望能对你有帮助!!!!

 

#include<iostream>
using namespace std;
int main()
{
 int n;
 int num[50001],c;
 int k;
    while(cin>>n)
 {
    memset(num,0,sizeof(num));//用0初始化!
  num[0]=1;
  for(int i=1;i<=n;i++)
  {   c=0;//表示进位!!
   for(int j=0;j<50001;j++)
     {   
    
      int s=num[j]*i+c;
       num[j]=s%10;
                  c=s/10;//进位数
     }
  }
    for(k=50000;k>=0;k--)
      if(num[k]==0)
              break;
   for(int j=k;j>=0;j--)
              cout<<num[j];
  
    cout<<endl;
    }
 return 0;
}

 代码的进一步优化,因为int类型能存9位数,所以进一步优化代码如下:

#include<iostream>
using namespace std;
int main()
{
 int n;
 int num[20002],i,j,k,c;
 while(cin>>n)
 {
  memset(num,0,sizeof(num));
   num[0]=1;
  for(i=1;i<=n;i++)
  {
   c=0;
   for(j=0;j<=20001;j++)
   {
    int s=num[j]*i+c;
    num[j]=s%1000000;
     c=s/1000000;
   }
  }
   for(k=20001;k>=0;k--)
     if(num[k]!=0)
      break;
     cout<<num[k];
     for(i=k-1;i>=0;i--)
    printf("%06d",num[i]);//6位的数字不足的在前面加0!!
     cout<<endl;
  }
  return 0;
 }

posted on 2012-11-22 09:43  @ 小浩  阅读(265)  评论(0编辑  收藏  举报