⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 n!.c

📁 一个高效阶乘的程序
💻 C
字号:

#include <stdio.h>
//#include <conio.h>
#include <time.h>  
#define MaxNum      10000

long nMax=0;

void LargeNumberTimes(long *num,long nTimes)
{ 
  long z1,z2,z3=0;
  for(z1=0;z1<=nMax;z1++)
    {
      //printf("count%d\n",z1);
      if((z2=num[z1]*nTimes+z3)>=100000)
        {
	  z3=z2/100000,z2%=100000;
	  if(z1==nMax)nMax++;
        }
      else z3=0;
      num[z1]=z2;
    }
}

int main()
{
  long n,n1,nt,n0=0,n5=0,nc2=-10,nMod5,num[MaxNum]={1};
  printf("Please input number:");
  scanf("%d",&n);
  long t=clock();
  for(nMod5=n1=2;n1<=n;n1++,nMod5++)
    {
      //printf("count%d\n",n1);
      if(nMod5==10)
	n0++,nc2++,nt=n1/10,nMod5=0;
      else
	{
	  if(nMod5==5)
	    {
	      n0++,nt=n1/5;
	      while(nt%5==0 && nt)
		n0++,nt/=5;
	    }
	  else nt=n1;
	}
      while(n0>=nc2 && (nt&1)==0 && nt)
	nc2++,(nt>>=1);
      
      if(nt>1)
	LargeNumberTimes(num,nt);
    }

  if((nc2+=10)>n0)
    LargeNumberTimes(num,(1<<(nc2-n0)));

  t=clock()-t;
  printf("Total:");
  printf("%d",num[nMax]);
  for(n1=nMax-1;n1>=0;n1--)printf("%04d",num[n1]);
  for(n1=0;n1<n0;n1++)
    printf("0");
  printf("\n");
  printf("Time = %d ms\n",t);
  //getch();
  return 0;
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -