题目:数值的整数次方
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
思路
①面试时,叫你写出比for循环更好的方法。利用左移>>和&的方法,使得求次方快速求得。
#include<bits/stdc++.h>
#include<vector>
using namespace std;
double Power(double base, int exponent) {
if(base == 0.0) return 0.0; // 边界
if(exponent == 0) return 1; // 边界
int e=abs(exponent); // 求指数绝对值
double res=1;
while(e){
if(e & 1)
res = res * base;
base = base*base;
e = e>>1;
}
return exponent>=0 ? res: 1.0/res;
}
int main(){
cout<<Power(2,-10)<<endl;
return 0;
}
②考虑base==0、exponent< = > 0的情况就好
class Solution {
public:
double Power(double base, int exponent) {
if(base == 0.0) return 0.0;
if(exponent == 0) return 1;
if(exponent > 0)
return base*Power(base, exponent-1);
if(exponent < 0)
return 1.0/base * Power(base, exponent+1);
}
};