在 http://numbers.computation.free.fr/Constants 中看到几个特别的程序,仅仅3-4行代码,却可以将圆周率,e(自然对数的底),log(2), 2的平方根 计算到数千位。这里将他们贴出来,方便大家学习。
说明,本文所有程序均来自: http://numbers.computation.free.fr/Constants/TinyPrograms/tinycodes.html 。
- int a=10000,b,c=8400,d,e,f[8401],g;main(){
- for(;b-c;)f[b++]=a/5;
- for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
- for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);}
- main(){int a=1e4,c=3e3,b=c,d=0,e=0,f[3000],g=1,h=0;
- for(;b;!--b?printf("%04d",e+d/a),e=d%a,h=b=c-=15:f[b]=
- (d=d/g*b+a*(h?f[b]:2e3))%(g=b*2-1));}
- long k=4e3,p,a[337],q,t=1e3;
- main(j){for(;a[j=q=0]+=2,--k;)
- for(p=1+2*k;j<337;q=a[j]*k+q%p*t,a[j++]=q/p)
- k!=j>2?:printf("%.3d",a[j-2]%t+q/p/t);}
- main(){int N=9009,n=N,a[9009],x;while(--n)a[n]=1+1/n;
- for(;N>9;printf("%d",x))
- for(n=N--;--n;a[n]=x%n,x=10*a[n-1]+x/n);}
- main(){int a=1000,b=0,c=7973,d,f[7974],n=800,k;
- for(;b<c;f[b++]=5);
- for(;n--;d+=*f*a,printf("%.3d",d/a),*f=d%a)
- for(d=0,k=c;--k;d/=b,d*=k)f[k]=(d+=f[k]*a)%(b=2*k+2);}
- main(){int a=1000,b=0,c=2658,d=75,f[2659],n=800,k;
- for(;b<c;f[b++]=d,d=-d);
- for(;n--;d+=*f*a,printf("%.3d",d/a),*f=d%a)
- for(d=0,k=c;--k;d/=b,d*=k)f[k]=(d+=f[k]*a)%(b=8*k+4);}
- main(){int a=1000,b=0,c=1413,d,f[1414],n=800,k;
- for(;b<c;f[b++]=14);
- for(;n--;d+=*f*a,printf("%.3d",d/a),*f=d%a)
- for(d=0,k=c;--k;d/=b,d*=2*k-1)f[k]=(d+=f[k]*a)%(b=100*k);}
发表于 @
2008年11月05日 23:43:00 | | 编辑|
举报| 收藏