⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gb-serise.cpp

📁 级数展开法计算圆周率精确到千万位以上
💻 CPP
字号:
//级数展开法计算pi值
#include <stdio.h>

void	calculate(int *,int *,double,double,int);
void	print(int *,double,double,int);

main()
{
	int bite,i;
	long double counter=0,time=0;
	printf("\n************************级数展开法计算pi值************************\n");
	
	do{
		printf("\n输入所要求的pi的最大位数(正整数):\n");
		scanf("%d",&bite);
		if(bite<=0)
			printf("输入错误!重新输入一个正整数!\n");
	}while(bite<=0);

	//动态分配数组大小,得到两个数组保存所求值
	bite=bite+10;
	printf("%d\n",bite);
	int *dpi=new int[bite];
	int *dtemp=new int[bite];

	//数组初始化为0
	for(i=0;i<bite;i++)
	{
		dpi[i]=0;
		dtemp[i]=0;
	}

	//设通项第一项初始值
	dpi[1]=2;
	dtemp[1]=2;

	//求pi值
	int sup=1,sdown=3,temp,carry,flag=1;
	
	//先迭代依次求出级数的各个通项,在对通项求和
	while(flag && (counter<2e+9))
	{
		carry=0;
		for(i=bite-1;i>0;i--)
		{
			temp=dtemp[i]*sup+carry;
			dtemp[i]=temp%10;
			carry=temp/10;
			time++;
		}
		carry=0;
		for(i=0;i<bite;i++)
		{
			temp=dtemp[i]+10*carry;
			dtemp[i]=temp/sdown;
			carry=temp%sdown;
			time++;
		}
		flag=0;
		for(i=bite-1;i>0;i--)
		{
			temp=dpi[i]+dtemp[i];
			dpi[i]=temp%10;
			dpi[i-1]+=temp/10;
			flag|=dtemp[i];
			time++;
		}
		sup++;
		sdown+=2;
		counter++;
	}

	//打印结果
	printf("\n**************************计算结果显示************************\n");
	printf("               pi=3.\n");
	for(i=0;i<bite-10;i++)
	{
		if(i%5==0)
		{
			if(i%50==0)
			printf("小数后%5d-%5d位:",i+1,i+50);
			else	printf(" ");
		}
		printf("%d",dpi[i+2]);
	}
	printf("\n");
	printf("*************************算法复杂度***************************\n");
	printf("计算次数:  %12.0f次\r\n",counter);
	printf("时间复杂度:  %12.0f\r\n",time);
	printf("空间复杂度:  %12d(int)\r\n",bite*2);

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -