该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
//c++
#include <cstdlib>
#include <iostream>
#include <fstream>
#define N 20010
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 <
for (int i=1;i<=N;i++)
{
fout <
if (i%10==0) fout << " ";
if (i%80==0) fout << endl;
}
return EXIT_SUCCESS;
}
注:①运行时会有数据弹出,那是无关紧要的,只为了加快了感觉速度;
②最后的txt文本里有20010位,其中最后10位可能是错的。
③程序中的是大写的请改成小写�