今天是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
知道上看到的,然后。。我就没看他了。不过应该就这意思。