c++中pow/sqrt需要小心的细节

在做HDOJ2045不容易系列之(3)—— LELE的RPG难题的时候,发现规律为 F(n)+F(n-1)=3*2^(n-1),原本代码如下

#include 
#include 
_int64 a[51]={0};
void set()
{
    a[1]=3;
	a[2]=6;
	for(int i=3; i<51; i++){
		a[i]=3*_int64(pow(2,i-1))-a[i-1];
	}

}
int main()
{
	int n;
	set();
    while(scanf("%d",&n)!=EOF)
       printf("%I64d\n",a[n]);
}

结果一直是wa,查阅http://www.cplusplus.com/reference/clibrary/cmath/pow/ c++函数标准用法后发现pow函数原型为:

     double pow (      double base,      double exponent );
long double pow ( long double base, long double exponent );
      float pow (       float base,       float exponent );
     double pow (      double base,         int exponent );
long double pow ( long double base,         int exponent );

参数类型需要用浮点float,将第九行改成

a[i]=3*_int64(pow(2.0,i-1))-a[i-1];
后,终于变成ac了,以后使用pow函数时需要有所注意

 

相同的,sqrt的原型也是

    double sqrt (      double x );
      float sqrt (       float x );
long double sqrt ( long double x );


 

你可能感兴趣的:(c++,菜鸟之伤)