//计算圆周率的C++程序(30000位)

#include #include #include #define N 10000

//using namespace std;

void mult(int *a,int b,int *s)

{ for(int i=N,c=0; i>=0; i--)

{ int y=a[i]*b+c;

c=y/10;

s[i]=y%10;

}

}

void divi(int *a,int b,int *s)

{ for(int i=0,c=0;i<=N;i++)

{ int y=a[i]+c*10;

c=y%b;

s[i]=y/b;

}

}

void incr(int *a,int *b,int *s)

{ for( int i=N,c=0; i>=0; i-- )

{ int y=a[i]+b[i]+c;

c=y/10;

s[i]=y%10;

}

}

bool eqs(int *a,int *b)

{ int i=0;

while( a[i]==b[i] && i<=N )

i++;

return i>N;

}

void print(int *pi)

{ printf("%1d./n",*pi);

for(int i=1;i<=N;i++)

{ printf("%d",pi[i]);

if (i%10==0)

printf(" ");

if (i%70==0)

printf("/n");

}

};

//int main(int argc, char *argv[])

void test()

{ int lpi[N+1],lls[N+1],lsl[N+1],lp[N+1];

int *pi=lpi,*ls=lls,*sl=lsl,*p=lp;

int i;

memset(pi,0,sizeof(lpi));

memset(ls,0,sizeof(lls));

memset(sl,0,sizeof(lsl));

memset(p,0,sizeof(lp));

*pi=*ls=*sl=1;

for(i=1;i{ mult(ls,i,sl);

divi(sl,2*i+1,ls);

incr(pi,ls,p);

//if(eqs(pi,p)) break;

int *t;

t=p;

p=pi;

pi=t;

print(pi);

}

mult(p,2,pi);

print(pi);

printf("/n/nSUCCESS!/n");

//return EXIT_SUCCESS;

}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐