面試題------數值整數次方
問題要求
實現函式double Power(double base,int exponent),求base的exponent次方。不得使用庫函式,同時不需要靠考慮大數問題。
問題分析
看到這個問題,我覺得我跟大多數人想的是一樣,直接迴圈作乘法。但是仔細一想,考慮的還是太少了。從底數和指數兩方面分別考慮:
有這麼幾種情況我們不容忽視,1)對0求倒數出現異常,要做特殊處理;2)0的0次方是沒有任何意義的,需要做特殊處理;3)複次冪即將指數求絕對值,然後再將最後的結果取倒數即可。
仔細閱讀題目就會發現,題目要求底數型別是double型的,那麼在判斷底數是不是等於0時,不能直接判斷base == 0.(計算機在表示小數時都有誤差)。判斷兩個小數是否相等,只能判斷它們之差的絕對值是不是在一個很小的範圍中。所以將該判斷方法封裝成一個函式即可 bool equal(double x,double y);
程式碼如下:
//全域性變數用來標識出錯是因為底數為0且指數為負數的情況 bool InvaildeInput = false; //判斷兩個小數是否相等 bool equal(double x,double y) { if ((x - y > -0.0000001) && (x - y < 0.0000001)) return true; else return false; } //計算指數為正整數時的整數次方 double PowerUnsignedExponent(double base,unsigned int exponent) { double result = 1.0; for(unsigned int i = 1; i <= exponent; i++) { result *= base; } return result; } double Power(double base,int exponent) { InvaildeInput = false; if (equal(base,0.0) && exponent < 0) { InvaildeInput = true; return 0.0; } unsigned int UnsignedExponent = (unsigned int)exponent; if (exponent < 0) { UnsignedExponent = (unsigned int)(-exponent); } double result = PowerUnsignedExponent(base,UnsignedExponent); if (exponent < 0) { result = 1.0 / result; } return result; }
問題總結
在此基礎上,還有使用位運算來優化該演算法的方法。這裡並沒有討論,還是想說要多思考,多寫。
相關推薦
面試題------數值整數次方
問題要求 實現函式double Power(double base,int exponent),求base的exponent次方。不得使用庫函式,同時不需要靠考慮大數問題。 問題分析 看到這個問題,我覺得我跟大多數人想的是一樣,直接迴圈作乘法。但是仔細一想,考慮的還是太少了
面試題16:數值的整數次方
指數 遞歸 試題 family nes style signed 類型 turn // 面試題16:數值的整數次方 // 題目:實現函數double Power(double base, int exponent),求base的exponent // 次方。不得使用庫函數
面試題11-求數值的整數次方
import str 整數 面試 1.0 pre pow col 類型 題目描述 給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。 代碼 import java.lang.Math; public cl
劍指offer{面試題11 :數值的整數次方}
這道題的優解用到了一個數學公式 an=an/2an/2(n為偶數) an=an/2an/2*a(n為奇數) 還有一點問題就是邊界值的考慮,在本題中,我們要考慮分母不能為零,ex是負數,結果是倒數。 思路:遞迴 public class test11 {
【劍指Offer學習】【面試題11 :數值的整數次方】
程式碼實現: public class Test11 { /** * 實現函式double Power(double base, int exponent),求base的exponent次方。 * 不得使用庫函式,同時不需要考慮大數問題。
劍指Offer面試題:10.數值的整數次方
一、題目:數值的整數次方 題目:實現函式double Power(doublebase, int exponent),求base的exponent次方。不得使用庫函式,同時不需要考慮大數問題。 在.NET Framework提供的BCL中,Math類實現了一個Pow方法,例如要求2的三次方,可
劍指offer——面試題15.1:判斷一個數是否為2的整數次方
lose while ios play 技術 using pow ret offer 1 #include"iostream" 2 using namespace std; 3 4 bool IsTwoPower(int n) 5 { 6 retu
【劍指Offer面試題】 九度OJ1516:調整數組順序使奇數位於偶數前面
pen 沒有 name func hide tracking 順序 popu type 題目鏈接地址: http://ac.jobdu.com/problem.php?pid=1516 題目1516:調整數組順序使奇數位於偶數前面 時間限制:
數值的整數次方
double類型 cnblogs dad desc 負數 復雜 簡單的 相等 比較 題目描述 給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。 思路: 1 關於次冪的問題特殊的情況,比如次冪為負數,或者基
劍指offer---數值的整數次方
color for -- exp == ret cnblogs 整數 one class Solution { public: double Power(double base, int exponent) { if (exponent &
劍指offer之 數值的整數次方
light exc sig 整數次方 ase 負數 dexp ret throw 問題描述:實現函數double power(double base,int exponent),求base的exponent次方。不能使用庫函數,同時不需要考慮大數問題。 package P
牛客網習題劍指offer之數值的整數次方
www. aps pre art ott ever view power left 分析: 要考慮到exponent為0和負數的情況。 如果base是0並且exponent是負數的時候呢?那就發生除0的情況了。 AC代碼:public class Solut
[劍指offer] 數值的整數次方
mar 整數次方 nbsp offer 浮點數 發現 數值的整數次方 bsp subject 題目描述 給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。 經典的思想: x ^ (2*n + 1) =
數值的整數次方(C++ 和 Python 實現)
n-n style elif function program ava right 直接 including (說明:本博客中的題目、題目詳細說明及參考代碼均摘自 “何海濤《劍指Offer:名企面試官精講典型編程題》2012年”) 題目 實現函數 double Powe
java Html&JavaScript面試題:HTML 的 form 提交之前如何驗證數值文本框的內容全部為數字? 否則的話提示用戶並終止提交?
打開 mit nbsp alert his span value gpo 成功 提交的驗證方法(通過單個字符比較): <!DOCTYPE html> <html> <head> <meta charset="UTF-8">
劍指offer-數值的整數次方
class question cpp i++ tro 告訴 優化 pan highlight 題目描述 給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。 解題思路 對於這道題,要考慮四種情況: 1、底數為0,
《劍指offer》---數值的整數次方
end time elf 限制 div str self lse math 本文算法使用python3實現 1. 問題1 1.1 題目描述: ??給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方 ??時間限制:1
劍指Offer--第16題 數值的整數次方
++ 循環 運算 判斷 api 比較 ron color 感覺 第16題 數值的整數次方 題目:給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。 思路 看到有點懵,第一感覺覺得是不是應該考慮0的0次或者負數情況,
【劍指offer】數值的整數次方
hdp aso gdm iic vue cio as2 npr tez 一、題目: 給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。 二、思路: 作弊思想 三、代碼: 【劍指o
【劍指offer】16、數值的整數次方
urn bsp unsigned info 直接 signed http 指數 ret 題目 實現double Power(double base, int exponent),求base的exponent次方,不得使用庫函數,同樣需要考慮大數問題。 思路 題目意思很清楚,