今天是3月14日,圆周率日。
我在网上看到了一段很短的计算圆周率的代码,可以算到8000位。我把程序输出的结果和Mathematica的结果比较了一下,验证了程序是正确的。
通过更改c的值和f数组的大小,可以算到更多的位。
我没弄明白这段代码的原理,如果有谁知道,欢迎在回复中告诉我。
简短版:
#include<stdio.h>
int a=10000,b=0,c=28000,d,e=0,f[28010],g;
main(){
for(;b-c;)f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%04d",e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
}
正常版:
#include<stdio.h>
int main(){
int f[28010],a=10000,b=0,c=28000,d,e=0,g;
while(b<c){
f[b]=a/5;
b++;
}
while(c>0){
d=0;
g=c*2;
b=c;
while(1){
d+=f[b]*a;
g--;
f[b]=d%g;
d/=g;
g--;
b--;
if(b==0)break;
d*=b;
}
c-=14;
printf("%04d",e+d/a);
e=d%a;
}
return 0;
}
http://zhidao.baidu.com/question/104312286.html?fr=push
知道上看到的,然后。。我就没看他了。不过应该就这意思。