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)