zoj 1007 又是数学~~
思路:基本做法就是一个一个计算,这里主要考虑的问题就是怎样减少运算,因为知道F(1)=1.0,
有由f(1)计算f(x)的想法(或减少运算),显然:f(x)-f(1) = sum( 1/(k*(k+x))-1/(k*(k+1)))
=sum((1-x)*(1/(k*(k+1)*(k+x))),由公式知道我们的分母里有了三项,而原来的只有两项,也就是
说如果k的范围一样的话,第二种方法的精确度更高,也就是说可以缩小k的枚举范围。最后还要注意枚举
范围后的无穷项,由积分公式知:sum(n,n>k)<inf(1/k^3)=1/(2*K*K),K为枚举变量k的上限。
——————————————————————————————————————————————————————————————————————————
源代码如下:
#include <iostream>
using namespace std;
int main( )
{
double i , sum ,add ;
int j;
for ( i = 0 ; i <= 2.000 ; i = i + 0.001 )
{
sum = 0;
for ( j = 1 ; j < 10000 ; j++ )
{
sum += 1.0 /( j*( j+1)*(j+i));
}
sum = sum*(1 - i)+( 1 -i)/(2* 10000 * 10000) + 1.0 ;
printf("%5.3f %16.12f\n", i, sum );
}
}
文章出处:飞诺网(http://dev.firnow.com/course/3_program/c++/cppxl/20090319/163381.html)
浙公网安备 33010602011771号