劍指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通過--11數值的整數次方-2
- 數值的整數次方
- 劍指Offer 表示數值的字串字串
- 【Algorithm】《劍指offer》面試題32----從1到n整數中1出現的次數Go面試題
- 劍指Offer系列之「表示數值的字串」字串
- JZ-012-數值的整數次方
- 劍指offer第49題 醜數
- 劍指Offer--面試題1:賦值運算子函式面試題賦值函式
- 劍指offer面試題11:旋轉陣列的最小數字(Java版已在牛客網AC)面試題陣列Java
- 劍指offer(Java版)--將字串轉換為整數Java字串
- 劍指offer——把字串轉換成整數C++字串C++
- GitHub#algorithm#:《劍指offer》 的50道面試題GithubGo面試題
- 【劍指 Offer】11. 旋轉陣列的最小數字陣列
- 劍指 Offer 11. 旋轉陣列的最小數字陣列
- 「劍指offer」27道Mybatis面試題含解析MyBatis面試題
- 劍指offer:輸入n個整數,找出其中最小的K個數。
- 劍指offer面試題(41-50)——java實現面試題Java
- 【劍指Offer】調整陣列順序使奇數位於偶數前面陣列
- 力扣 - 劍指 Offer 67. 把字串轉換成整數力扣字串
- 《Leetcode of December》劍指 Offer 67. 把字串轉換成整數LeetCode字串
- LeetCode|劍指 Offer 49.醜數LeetCode
- 劍指offer面試題29:順時針列印矩陣面試題矩陣
- 劍指Offer-31-最小的K個數
- 劍指offer——斐波那契數列
- 劍指 Offer 21. 調整陣列順序使奇數位於偶數前面陣列
- 劍指offer:旋轉陣列的最小數字陣列
- 劍指offer 旋轉陣列的最小數字陣列
- Leetcode 劍指 Offer 40. 最小的k個數LeetCode
- 劍指Offer題解合集
- 劍指Offer--陣列中重複的數字陣列
- 劍指offer-轉陣列的最小數字-php陣列PHP
- 劍指Offer-34-把陣列排成最小的數陣列
- 【劍指offer】二進位制中1的個數
- 劍指offer——把陣列排成最小的數C++陣列C++
- 劍指offer刷題之路--1.陣列中重複的數字陣列
- 劍指Offer-把陣列中的數排成一個最小的數陣列
- 刷題記錄:劍指offer+遇到的筆試題+LeetCode筆試LeetCode
- [劍指offer題解][Java]陣列中出現次數超過一半的數字Java陣列