〖打印本页〗〖打印选项〗 |
圆周率,计算机C++编译器中的运算程序 |
微机 Windows XP 中 Dev-cpp 中的运算程序(30000位)(C++) #include <cstdlib.h> #include <iostream.h> #include <fstream.h> #define N 30015 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; } int main(int argc, char *argv[]) { int lpi[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)) break; int *t; t=p; p=pi; pi=t; if (i%50==0) cout << i << " "; } cout << endl; mult(p,2,pi); ofstream fout("pi.txt"); fout << *pi << "."; for (int i=1;i<=N;i++) { fout << *(pi+i); if (i%10==0) fout << " "; if (i%80==0) fout << endl; } return EXIT_SUCCESS; } 注: ①运行时会有数据弹出,那是无关紧要的,只为了加快了感觉速度; ②最后的txt文本里有30015位,其中最后15位可能是错的。 ③程序中的<,>是大写的请改成小写。 文章作者:未知 |