You can approximate PI by using the following series:
PI = 4(1 - 1/3 + 1/5 - 1/7 + 1/9 - ... -1/(2i-1) + 1/(2i+1))
Input
An integer i (0<i<=100000).
The PI value.
You should set the precision to 15.
Sample Input
Copy sample input to clipboard10
3.232315809405593
一开始老是超时,最后放弃了按顺序叠加的方法(因为那要频繁计算一个pow(-1,n)),而是把加法看成两段,奇偶分开算,就没超时了。
#include
#include
using namespace std;
double danshu(int lev)
{
double sum=0;
for (int i = 1; i <= lev; ++i)
{
sum += 1.0/(4*i - 3);
}
return sum;
}
double oushu(int lev)
{
double sum=0;
for (int i = 1; i <= lev; ++i)
{
sum += 1.0/(4*i - 1);
}
return -sum;
}
int main()
{
int n,dan,shuang;
cin>>n;
double PI=0;
n++;
if (n % 2 ==0)
{
dan = n/2;
shuang = dan;
}
else
{
shuang = n / 2;
dan = shuang + 1;
}
cout<
<
<<(danshu(dan)+oushu(shuang))*4.0<