【#文档大全网# 导语】以下是®文档大全网的小编为您整理的《圆周率 计算 C代码》,欢迎阅读!

#include #include #include #define N 30015
using namespace std;
void mult (int *a,intb,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,intb,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; } }
booleqs(int *a,int *b) { int i=0;
while (((*(a+i))==(*(b+i)))&&(i<=N)) i++; return i>N; }
int main(intargc, char *argv[]) {
cout<< "正在计算 . . . (0%)";
intlpi[N+1],lls[N+1],lsl[N+1],lp[N+1];
int *pi=lpi,*ls=lls,*sl=lsl,*p=lp;
for (int i=0;i<=N;i++)*(pi+i)=*(ls+i)=*(sl+i)=*(p+i)=0; memset(pi,0,sizeof(pi)); memset(ls,0,sizeof(ls)); memset(sl,0,sizeof(sl)); memset(p,0,sizeof(p)); *pi=*ls=*sl=1;
for (int i=1;true;i++) {
mult(ls,i,sl); divi(sl,2*i+1,ls); incr(pi,ls,p); if (eqs(pi,p)) {
cout<< "\b\b\b\b100%)\n"; break; } int *t; t=p; p=pi;
pi=t;
//if (i%1000==0) cout<< i << " "; if(i%1000 == 0) {
/*cout<< i/1000 << "% "; if(i%5000 == 0) cout< if(i/1000 < 11) {
cout<< "\b\b\b"; } else {
cout<< "\b\b\b\b"; }
cout<< i/1000 << "%)";
}
}
cout<
cout<< "计算完成\n正在保存 . . .\n"; mult(p,2,pi);
ofstreamfout("pi.txt"); fout<< *pi << ".";
for (int i=1;i <= N - 15;i++) {
fout<< *(pi+i);
if (i%10==0) fout<< " "; if (i%80==0) fout< }
cout<< "保存完成\n"; cout<< "按回车键退出"; cin.peek();
return EXIT_SUCCESS; }
本文来源:https://www.wddqxz.cn/7c7d06c7d5bbfd0a795673c5.html