#include
#include
#include
#include
#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))+c10;
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[])
{
system(“title 圆周率计算”);
cout<<“■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n\n”<<endl;
cout<<“本程序用于演示使用C++语言计算圆周率近似值,精确到小数点后30000位。”<<endl;
cout<<“■■■■■■■■■■【按任意键开启圆周率密码!】■■■■■■■■■■”<<endl;
getchar();
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§);
*pi=*ls=sl=1;
for(int i=1;true;i++)
{
mult(ls,i,sl);
divi(sl,2i+1,ls);
incr(pi,ls,p);
if(eqs(pi,p)) break;
int *t;
t=p;
p=pi;
pi=t;
if(i%10000)
{
system(“cls”);
cout<<“正在计算圆周率”<<i/1000<<"%";
}
}
cout<<endl;
mult(p,2,pi);
ofstream fout(“pi.txt”);
fout<<*pi<<".";
for(int i=1;i<=N;i++)
{
fout << *(pi+i);
if(i%100) fout << " “;
if(i%80==0) fout << endl;
}
system(“cls”);
cout<<“■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n\n”<<endl;
cout<<“成功解码圆周率至小数点后3万位!数据已写入pi.txt,您可以自行查看。\n\n” <<endl;
cout<<“■■■■■■■■■■【按任意键查看圆周率密码!】■■■■■■■■■■”<<endl;
getchar();
system(”%windir%\system32\notepad.exe pi.txt"); // system(“pi.txt”);
return EXIT_SUCCESS;
}
2021-03-20
最新推荐文章于 2021-12-20 21:15:28 发布