c++中pow/sqrt需要小心的細節

在做HDOJ2045不容易系列之(3)—— LELE的RPG難題的時候,發現規律爲 F(n)+F(n-1)=3*2^(n-1),原本代碼如下

#include <stdio.h>
#include <math.h>
_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 );


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章