#include <stdio.h>
#include <math.h>

void lcala(long *);
void lcalb(long *);
void ladd(long *,long *,long *);
void lsub(long *,long *,long *);
void ldiva(long *);
void ldivb(long *,long,long *);
void printresult(long *);

#define L  65536
#define L1 ((L/9)+1)
#define L2 (L1+1)
#define N1 (L/1.39794+1)
#define N2 (L/4.75679+1)

void main(void){
	long k;
	static long s[L2+2],sw[L2+2],sv[L2+2];
	for(k=0;k<=L2;k++)
		s[k]=sw[k]=sv[k]=0;
	lcala(sw);
	lcalb(sv);
	lsub(sw,sv,s);
	printresult(s);
}
void lcala(long d[]){
	long k,w[L2+2],qw[L2+2];
	for(k=0;k<=L2;k++)
		w[k]=qw[k]=0;
	w[0]=16*5;
	for(k=1;k<=N1;k++){
		ldiva(w);
		ldivb(w,2*k-1,qw);
		if((k%2)!=0)
			ladd(d,qw,d);
		else
			lsub(d,qw,d);
	}
}
void lcalb(long d[]){
	long k,w[L2+2],qw[L2+2];
	for(k=0;k<=L2;k++)
		w[k]=qw[k]=0;
	w[0]=4*239;
	for(k=1;k<=N2;k++){
		ldivb(w,57121,w);
		ldivb(w,2*k-1,qw);
		if((k%2)!=0)
			ladd(d,qw,d);
		else
			lsub(d,qw,d);
	}
}
void printresult(long c[])
{
	long i,j,x=1;
	static long p[L2*9+2];
	for(i=1;i<=L2;i++){
		for(j=8;j>=0;j--){
			p[x]=c[i]/pow(10,j);
			p[x]%=10;
			x++;
		}
	}
	printf("PI=%d.\n\n",c[0]);
	for(i=1;i<=L;i++){
		printf("%d",p[i]);
		if(i%1000==0)
			printf("\n\n");
		else if(i%50==0)
			printf("\n");
		else if(i%10==0)
			printf(" ");
	}
	printf("\n");
}
void ladd(long a[],long b[],long c[])
{
	long i,cy=0;
	for(i=L2;i>=0;i--){
		c[i]=a[i]+b[i]+cy;
		if(c[i]<1000000000)
			cy=0;
		else{
			c[i]-=1000000000;
			cy=1;
		}
	}
}
void lsub(long a[],long b[],long c[])
{
	long i,brrw=0;
	for(i=L2;i>=0;i--){
		c[i]=a[i]-b[i]-brrw;
		if(c[i]>=0)
			brrw=0;
		else{
			c[i]+=1000000000;
			brrw=1;
		}
	}
}
void ldiva(long a[])
{
	long i,tr1=0,tr2=L2;double d,rem=0;
	while(a[tr1]==0){
		tr1++;
	}
	while(a[tr2]==0){
		tr2--;
	}
	for(i=tr1;i<=tr2+1;i++){
		d=a[i]+rem;
		a[i]=d/25;
		rem=(d-(double)a[i]*25)*1000000000;
	}
}
void ldivb(long a[],long b,long c[])
{
	long i,tr=0;double d,rem=0;
	while(a[tr]==0){
		c[tr]=0;
		tr++;
	}
	for(i=tr;i<=L2;i++){
		d=a[i]+rem;
		c[i]=d/b;
		rem=(d-(double)c[i]*b)*1000000000;
	}
}

–ß‚é