一行代码——计算PI后15,000位

发布时间 2023-11-28 18:39:04作者: BadBadBad__gqc

先上代码

a[52514],b,c=52514,d,e,f=1e4,g,h;main(){for(;b=c-=14;h=printf("%04d",e+d/f))for(e=d%=f;g=--b*2;d/=g)d=d*b+f*(h?a[b]:f/5),a[b]=d%--g;}

运行的时候可能会有警告,像这样。
image
但是不用管,直接运行就行了

注意,一定要用 \(C\) 语言,不能用\(C++\)语言

然后是优化版

#include <stdio.h>
#define PI_NUM 100000 //要算到的位数
#define NUM (PI_NUM * 14 / 4)
#define int long long int
long long a[NUM + 1];
long long b = NUM;
long long c = NUM;
long long d = 0, e = 0;

int main(void)
{
	for (long long i = 0; i < NUM + 1; i++)
	{
		a[i] = 2000;
	}
	while (c != 0)
	{
		b = c;
		e = d % 10000;
		d = e;
		while (b != 0)
		{
			d = d * b +  a[b] * 10000;
			a[b] = d % (2 * b - 1);
			d /= (2 * b - 1);
			b--;
		}
		c -= 14;
		printf("%04d", e + d / 10000);
	}
	return 0;
}

大概可以算到10多万位小数。