劍指offer面試題11 數值的整數次方
一、題目
實現函式double Power(double base,int exponent ),求base的exponent次方。要求:不得使用庫函式,同時不需要考慮大數問題。
二、思考分析
題目不需要考慮大數問題,看似很簡單,但是需要考慮全面,並且提高效率,才是面試官想要看到的結果。
需要考慮的情況 :
* 指數(exponent)等於零時;
* 指數(exponent)為正數時;
* 指數(exponent)為負數時;
* 底數(base)為零,指數也為零時;
package com.offer.jianzhi;
public class DoublePower {
// 方法一:考慮全面
public double power(double base, int exponent) {
double result = 0.0;
if (exponent == 0) {
return 1.0;
}
if (base == 0.0) {
return result;
}
if (exponent < 0) {
result = 1.0 / cal(base, -exponent);
} else {
result = cal(base, exponent);
}
return result;
}
public double cal(double base, int exponent) {
double d = 1.0;
for (int i = 0; i < exponent; i++) {
d = d * base;
}
return d;
}
// 方法二:提高效率
public double power2(double base, int exponent) {
double result = 0.0;
if (exponent == 0) {
return 1.0;
}
if (base == 0.0) {
return result;
}
if (exponent < 0) {
result = 1.0 / powerWithUnsignedExponent(base, -exponent);
} else {
result = powerWithUnsignedExponent(base, exponent);
}
return result;
}
public double powerWithUnsignedExponent(double base, int exponent) {
if (exponent == 0) {
return 1.0;
}
if (exponent == 1) {
return base;
}
double d = powerWithUnsignedExponent(base, exponent >> 1);// exponent>>1表示除以2
d *= d;
if ((exponent & 0x1) == 1) {// 判斷exponent是否為奇數
d *= base;
}
return d;
}
public static void main(String[] args) {
double a = Math.pow(3, 32);// 使用庫函式
System.out.println(a);
DoublePower dp = new DoublePower();// 方法一
double d = dp.power(3, 32);
System.out.println(d);
double d1 = dp.power2(3, 32);// 方法二
System.out.println(d1);
}
}
相關文章
- 【leetcode】劍指 Offer 16. 數值的整數次方LeetCode
- 【劍指offer】字串轉整數字串
- 劍指Offer 表示數值的字串字串
- 《劍指offer》:[54]表示數值的字串字串
- 劍指Offer系列之「表示數值的字串」字串
- 【Algorithm】《劍指offer》面試題32----從1到n整數中1出現的次數Go面試題
- 《劍指offer》:[49]把字串轉化成整數字串
- 劍指offer面試題14 調整陣列順序使奇數位於偶數前面面試題陣列
- 劍指offer面試題12 列印1到最大的n位數面試題
- 【劍指Offer學習】【面試題14 :調整陣列順序使奇數位於偶數前面】面試題陣列
- 劍指offer(Java版)--將字串轉換為整數Java字串
- 劍指offer——把字串轉換成整數C++字串C++
- 劍指Offer--面試題1:賦值運算子函式面試題賦值函式
- 【演算法詳解】求解數值的整數次方演算法
- 劍指 Offer 11. 旋轉陣列的最小數字陣列
- 【劍指 Offer】11. 旋轉陣列的最小數字陣列
- 劍指offer面試題11:旋轉陣列的最小數字(Java版已在牛客網AC)面試題陣列Java
- 【劍指Offer】調整陣列順序使奇數位於偶數前面陣列
- 力扣 - 劍指 Offer 67. 把字串轉換成整數力扣字串
- 【劍指offer】把陣列排成最小的數陣列
- 劍指offer面試題15 連結串列中倒數第K個結點面試題
- GitHub#algorithm#:《劍指offer》 的50道面試題GithubGo面試題
- 「劍指offer」27道Mybatis面試題含解析MyBatis面試題
- 劍指offer面試題9 斐波那契數列及青蛙跳臺階問題面試題
- 劍指 Offer 21. 調整陣列順序使奇數位於偶數前面陣列
- 劍指offer:旋轉陣列的最小數字陣列
- 劍指offer 旋轉陣列的最小數字陣列
- 《Leetcode of December》劍指 Offer 67. 把字串轉換成整數LeetCode字串
- 【劍指offer】數字在排序陣列中出現的次數排序陣列
- LeetCode|劍指 Offer 49.醜數LeetCode
- 劍指offer面試題(41-50)——java實現面試題Java
- 劍指Offer題解合集
- 【劍指offer】調整陣列順序陣列
- 《劍指offer》:[38]數字在排序陣列中出現的次數排序陣列
- 【劍指offer】二進位制中1的個數
- 劍指Offer--陣列中重複的數字陣列
- 劍指Offer-34-把陣列排成最小的數陣列
- 劍指offer——把陣列排成最小的數C++陣列C++