sgf87

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)

posted on 2010-04-29 09:17  sgf87  阅读(1309)  评论(0编辑  收藏  举报

导航