|
- #include<stdio.h>- l" B ]- \1 Q
- #include<iostream> p2 i+ e& a# @6 w% ?% g$ J+ o
- using namespace std;; ~' m: @ k, o4 S- ?. d
- int main(void)" q+ @( B0 w! [; H, C4 b& A
- { //本程序每四位数输出结果,如果请求计算的位数不是4的整数倍,最后输出可能会少1~3位4 Q( C. I; M( C4 o, K; n Z8 {
- long a[2]={956,80},b[2]={57121,25},i=0,j,k,p,q,r,s=2,t,u,v,N,M=10000;
. }2 x0 s9 k y3 ]" [+ a4 ~) [ - printf("%9cMachin%6cpi=16arctan(1/5)-4arctan(1/239)\nPlease input a number.\n",32,32);
2 F3 T$ K' E4 y, J* R2 {8 G Z - cin>>N,N=N/4+3;# Y# U: U& q8 ]
- long *pi=new long[N],*e=new long[N];
; y4 w# A3 a0 f; ^" W - while(i<N)pi[i++]=0;
- l2 \ O; s) y J0 V& y& J - while(--s+1)
) d6 q* G4 B1 A7 n, o - {
9 F, C" o% f1 c4 b' [- ~ - for(*e=a[k=s],i=N;--i;)e[i]=0;3 _2 L d+ r# R6 V
- for(q=1;j=i-1,i<N;e[i]?0:++i,q+=2,k=!k)
$ d' t7 n6 P6 B! K7 r" F - for(r=v=0;++j<N;pi[j]+=k?u:-u)u=(t=v*M+(e[j]=(p=r*M+e[j])/b[s]))/q,r=p%b[s],v=t%q;
" A% }" f9 u6 o - }
. w6 O# s" [" N/ s+ I U - while(--i)(pi[i]=(t=pi[i]+s)%M)<0?pi[i]+=M,s=t/M-1:s=t/M;1 H/ f6 H6 I( J9 n
- for(cout<<"3.";++i<N-2;)printf("%04ld",pi[i]);
- z; i+ d8 Z5 f# @% O. W L - delete []pi,delete []e,cin.ignore(),cin.ignore(); {4 U) A/ Q0 o, ?/ q0 P! u
- return 0;
) N5 D8 K0 L7 |0 ]6 w. Q; O. d - }
复制代码 |
|