PTA基础编程坑题7-15 计算圆周率(15 分)

根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。
pi/2=1+1/3+2!/3*5+...+n!/(3*5*7*...(2*n+1))

输入格式:

输入在一行中给出小于1的阈值。

输出格式:

在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。

输入样例:

0.01

输出样例:

3.132157

这道题看似简单,实则有大坑,首先你不能是计算好整型再转换,这里又有个坑,如果你要写整型,

那么必须是long long,否则过不了几个测试点,其次如果你是long long类型,那么转换成double,就会出问题,

因为当数值超大时,double是无法全部转换long long的,它会转换为负数。。所以你既不能是普通整型,又不能

用double转换大数值,那么你只有一开始计算的时候都是用double来计算。

那么出于效率和简化的目的,此题可以用动态规划的策略,自底向上一步步迭代上去。代码如下:

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	double item=1,thrv,sum=1;
	double memb=1,deno=1;
	int i=1,j=3;
	cin>>thrv;
	while(item>=thrv)
	{
		memb*=i;
		deno*=j;
		item=memb/deno;
		sum+=item;
		i++;
		j+=2;
	}
	cout<<setiosflags(ios::fixed)<<setprecision(6)<<2*sum;
}

猜你喜欢

转载自blog.csdn.net/qq_37729102/article/details/80599827