您的位置:首页 > 其它

大数阶乘

2010-03-09 22:56 141 查看
大数阶乘。

阶乘攀升特别快,在C中用int,double等,能计算的范围相当有限;但我们对一个数的表示,按照通常的方法,例如123;如果以10为基,则不同的只是每位所成基数的幂不同。

于是,想到使用一个数组保存数字,而基数可以任意。在计算中,应注意对基数的处理。



#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define BUFFSIZE 50000
#define BASE 10000

		int
			main(void)
		{
			int buff[BUFFSIZE]={0};
			int N,i,k,j=0;
			int len=1;
			int add=0;
			FILE *fr,*fw;
			clock_t start,end;

			start=clock();

			if((fr=fopen("input.txt","r"))==NULL)
			{
				perror("input.txt");
				exit(EXIT_FAILURE);
			}//if
			if((fw=fopen("output.txt","w"))==NULL)
			{
				perror("input.txt");
				exit(EXIT_FAILURE);
			}//if
			fscanf(fr,"%d",&N);
			N++;
			buff[0]=0;	buff[1]=1;

			while(N-->1)
			{
				for(i=1;i<=len;i++)
				{
					k=buff[i]*N+add;
					add=k/BASE;
					buff[i]=k%BASE;
				}
				while(add>0){
					buff[++len]=add%BASE;
					add/=BASE;
				}
			}//while

			len++;
			while(--len>0)
				fprintf(fw,"%d",buff[len]);
			fclose(fr);
			fclose(fw);

			end=clock();
			printf("%lf",(((double)(end-start)/CLOCKS_PER_SEC)*1000.00));

			return EXIT_SUCCESS;
		}




在测试中,我计算了10000的阶乘;貌似基数越大,计算的精度越小;但基数如果取小,那么计算的时间会增加。

在网上看到可以通过在C中嵌入汇编来提高速度,没试过。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: