求某個數的整數次方

2021-08-26 22:57:29 字數 1502 閱讀 3804

題目:實現函式double power(double base, int exponent),求base的exponent次方。不需要考慮溢位。

這裡直接求解的**應該不難寫,這裡先考慮比較簡單的情況,即base非0,exponent大於0。 }

當然,有更好的解法,不然就不寫這blog了。。。

更好的解法是基於下面的想法:

比如求x

16,可以分解成:x

16=x8*x

8,於是,只要求出x

8,再做乙個乘積就可得到x

16,同理,x8=x

4*x4,……依次類推。所以求x

16,只需要做4次乘積:x*x、x2*x

2、x4*x

4、x8*x

8。如果用上面**所述方法,要進行15次乘積。

現在問題變成,怎麼把exponent分解成2的若干個整數次方,尤其是當exponent不是2的整數次方時,比如6。這裡就用到了二進位制的一些特點,比如6的二進位制為0110,6可以分解為4+2,二進位制熟悉的話,這裡應該是一眼可以看出來的,就是對應二進位制為1的位所表示的數的和。則x6=x

4*x2。

作者也給出這種方法的一種實現,是比較容易理解的,用乙個包含32個int的陣列儲存每一位對應的乘積,最終結果就是所有32個乘積的乘積。說得不清楚?結尾給你鏈結仔細去看……

我覺得另外一種實現更簡單,也更快。

// powerwithunsignedexponent.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include

using namespace std;

double power(double base, int exponent)

if (exponent<0)

if (exponent==1)

if (exponentisfushu)

for (int i=exponent;i>0;i/=2)

temp*=temp;

}if (exponentisfushu)

return result;

}int _tmain(int argc, _tchar* argv)

if (exponent<0)

if (exponent==1)

if (exponentisfushu)

for (int i=exponent;i>0;i/=2)

temp*=temp;

} if (exponentisfushu)

return result;}

int _tmain(int argc, _tchar* argv)

{ //cout<

這幾行**做的事是一樣的。t每次除以2表示t向右移動1位,t%2==1時,表示最右邊的位為1,所以這裡做的事是一樣的。從t(也就是exponent)的二進位制的最右邊位(最低位)開始,如果為0,則不需要相乘,然後考慮第二位(通過移位實現),並且,這裡用tmp來儲存二進位制中相應位對應的乘積,如果哪一位為1,剛把它乘到結果中去。

求乙個數的整數次方

題目 求乙個數的整數次方。題目是如此的簡單,但是需要考慮的還是比較多 1.指數為負,底數是零 2.指數底數都是零 3.返回正常零和返回錯誤零的區別 4.底數為正,指數為負如何處理 5.考慮底數次方大的話,想效率問題 6.處理double數值相等問題 以下直接是 詳細考慮除底數指數全零的以上所有情況!...

12 整數的整數次方

給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。保證base和exponent不同時為0 快速求冪演算法 如 x 2 x x x 4 x 2 x 2 x 8 x 4 x 4 x 16 x 8 x 8 x 31 x 16 x 8 x 4 x...

數值整數次方

題目 實現函式double power double base,int exponent 求base的exponent次方。不得使用庫函式,同時不需要考慮 大數問題。includebool equal double num1,double num2 double powerwithunsignede...