【π Day】一段很短的计算圆周率的代码

今天是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;
}

《【π Day】一段很短的计算圆周率的代码》有一个想法

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注