題目如下:
實現函式double power(double base , int exponent), 求base的exponent次方。不得使用庫函式,同時不需要考慮大數問題。
這個題目需要注意的有兩點:一是我們需要分情況討論,看似乙個數的整數次方很好求,直接用exponent個base撐起來即可,但實際上我們要分以下幾種情況。(以下用exp代替exponent)
為負數 base的正數次方分之一
base為負數 exp 為0 1
為正數 直接計算
為負數 不存在
base為0 exp 為0 1
為正數 直接計算
為負數 base的正數次方分之一
base為正數 exp 為0 1
為正數 直接計算
第二個要注意的點是,double判等不能用==符號,只能用兩者的差值來判斷。(double 在運算中,由於截尾的原因,總是有誤差的。)可以用如下**判斷:
public static boolean doubleequal(double d1 , double d2)
return false;
}
另外,這裡當判斷完成後直接計算有兩種思路:
1.用while迴圈直接計算:
private static double power1(double base, int i)
return result;
}
2.運用如下公式遞迴處理:
a^(n/2)*a^(n/2)
a^n =
a^((n-1)/2)*a^((n-1)/2
**如下:
private static double power1(double base, int i)
return result;
}
整體**如下:
package com.offer;
public class power
private static double power2(double base, int exp)
if (exp == 1)
double result = power2(base , exp >> 1);
result *= result;
if ((exp & 1) == 1)
return result;
} public static boolean doubleequal(double d1 , double d2)
return false;
} private static double power(double base, int exp)
return 0 ;
} if (exp == 0) else if (exp < 0) else
}private static double power1(double base, int i)
return result;
}}
劍指Offer系列16 數值的整數次方
實現函式double power double base,int exponent 求base的exponent次方。不得使用庫函式,同時不需要考慮大數問題。示例 1 輸入 2.00000,10 輸出 1024.00000 示例 2 輸入 2.10000,3 輸出 9.26100 示例 3 輸入 2...
劍指Offer系列之 數值的整數次方
給定乙個 double 型別的浮點數 base 和 int 型別的整數 exponent。求 base 的 exponent 次方。保證 base 和 exponent 不同時為 0 假設求 x 6x 6 x6已知 6 可以表示成二進位制110 可以表示成 6 0 20 1 21 1 2 26 0 ...
劍指offer系列 12 數值的整數次方
q 給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。保證base和exponent不同時為0。c 時間限制 c c 1秒,其他語言2秒 空間限制 c c 32m,其他語言64m t 1.剛剛學習了快速冪,正好用上 這個題要注意,expon...