1. 程式人生 > >面試題------數值整數次方

面試題------數值整數次方

問題要求

實現函式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次方,不得使用庫函數,同樣需要考慮大數問題。 思路 題目意思很清楚,