演算法學習記錄十(C++)--->數值的整數次方
描述
- 給定一個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。
分析
1.普通方法,幾次方就是乘以幾次
2.位運算解法
普通解法
class Solution {
public:
double Power(double base, int exponent) {
double ret = 1;
if(exponent == 0){
return 1.0f;
}
else if(exponent < 0){
while(exponent!=0){
ret /= base;
exponent++;
}
}
else{
while(exponent!=0){
ret *= base;
exponent--;
}
}
return ret;
}
};
位運算
- 1.全面考察指數的正負、底數是否為零等情況。
- 2.寫出指數的二進位制表達,例如11表達為二進位制1011。
- 3.舉例:10^1011 = 10^0001*10^0010*10^1000。
- 4.通過&1和>>1來逐位讀取1011,為1時將該位代表的乘數累乘ret到最終結果。 每位移一次都要翻倍
class Solution {
public:
double Power(double base, int exponent) {
double ret = 1.0f; // 初始
double cur = base;
int ex = 0;
if(exponent==0){
return 1.0f;
}
else if(exponent>0){
ex = exponent;
}
else{
// 負數的時候分母要處理下
if(base==0){};
ex = -exponent;
}
// 指數位運算向右移動,不等於0的時候累乘
while(ex){
// 位運算中遇到1代表一次累乘
// 3.舉例:10^1011 = 10^0001*10^0010*10^1000。
if((ex&1)==1){
ret *= cur;
}
// 每次位移都要翻倍10^0,10^1,10^2,10^4,10^8
cur *= cur;
// 這裡一定要重新給ex賦值,不然死迴圈了
// ex>>1這樣的話ex不會變的,沒注意,會死迴圈
ex>>=1;
}
return exponent>0?ret:1/ret;
}
};
相關文章
- 數值的整數次方
- JZ-012-數值的整數次方
- offer通過--11數值的整數次方-2
- 【leetcode】劍指 Offer 16. 數值的整數次方LeetCode
- c++學習記錄C++
- ES6系列入門學習記錄:變數的解構賦值變數賦值
- 位運算-判斷一個數是否為2的整數次方
- 演算法學習記錄02-判斷輸入數字是不是質數演算法
- C++學習記錄1C++
- 變數與常量 - Go 學習記錄變數Go
- MYSQL學習筆記15: 數值函式MySql筆記函式
- 「學習記錄」《數值分析》第二章計算實習題(Python語言)Python
- leetcode 整數拆分(c++)LeetCodeC++
- 記錄:演算法題數學知識總結演算法
- [MatLab]學習筆記2:MatLab數值資料Matlab筆記
- 演算法學習筆記(40): 具體數學演算法筆記
- 「學習記錄」《數值分析》第三章計算實習題(Python語言)Python
- 123 C++試寫一演算法,求隨機輸入的三個整數的最大值C++演算法隨機
- day 1 c++小白學習記錄C++
- 「分數規劃」學習筆記及做題記錄筆記
- MySql先分組統計總記錄數,再獲取記錄數中的最大值MySql
- ES6學習筆記(二)【數值,陣列】筆記陣列
- 【學習筆記】數學筆記
- 演算法學習筆記(21):數論分塊演算法筆記
- 演算法學習筆記(16): 組合數學基礎演算法筆記
- 輸入十個整數,輸出其中質數
- 02_Python學習筆記之統計整數二進位制中1的個數Python筆記
- PHP 第十週函式學習記錄PHP函式
- 運籌學-整數規劃IP演算法演算法
- [python學習手冊-筆記]003.數值型別Python筆記型別
- 《演算法圖解》學習記錄演算法圖解
- 一元8次方的組合數學與代數
- 一元6次方的組合數學與代數
- 一元7次方的組合數學與代數
- Hellow C# unity學習記錄(7)值型別引用型別以及引數傳遞C#Unity型別
- 透過交換指標變數的值改變大小數字的位置-學習筆記指標變數筆記
- C/C++ 合法整數與字元C++字元
- 數論學習筆記 (2):質數筆記
- 【演算法學習】組合數學演算法