求pi 以及 pi小数点后n位

这时IOCCC大赛上的得奖代码, 求pi, 可以精确到第56000位. 膜拜大神.

#include 
#define MAX_C 56000
int a=10000,b,c=MAX_C,d,e,f[MAX_C+1],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);
printf("\n");
getchar();}

我对这个代码做了些修改, 输入一个n, 求出pi小数点后第n位.

// 求小数点后n位 
#include 
#define MAX_C 56000
int a = 10000, b, c = MAX_C, d, e, f[MAX_C + 1], g, n, ans, cnt;
using namespace std;

int main()
{
    scanf("%d", &n);
    for (; b - c; ) f[b++] = a / 5;
    for (; d = 0, g = c * 2; c -= 14, ans = e + d / a, e = d % a, cnt++) {
        if (cnt * 4 > n) break;
        for (b = c; d += f[b]*a, f[b] = d % --g, d /= g--, --b; d *= b);
    }
    if (n % 4 == 0) cout << (ans / 1000);
    else if (n % 4 == 1) cout << ((ans / 100) % 10);
    else if (n % 4 == 2) cout << ((ans / 10) % 10);
    else if (n % 4 == 3) cout << (ans % 10);
}

原理? 我也不知道呀.

你可能感兴趣的:(弃用的分类:c++,数学,2018暑假)