012数值的整数次方
题目:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
方法:位运算法
思路:这道题的难点就是有多种情况:
(1)先对exponent的正负进行判断,统一当成正的来算,最后在返回时用三元表达式来进行修改
(2)需要判断exponent奇偶性,如果是奇数,就先让最后结果res乘个base,用x&1==1或0来判断奇偶
(3)用一个中间变量来每次右移之后进行翻倍,最后当n为1时,再跟res相乘即可
代码:
public double Power(double base, int exponent) {
double res = 1,cur=base;
int n;
if(exponent>0){
n=exponent;
}else if(exponent<0){
if(base==0) throw new RuntimeException("分母不能为0");
n=-exponent;
}else{
return 1;
}
while(n!=0){
if((n&1)==1){
res*=cur;
}
cur*=cur;//中间变量,当n为1时,符合奇数,res跟cur相乘
n>>=1;//位运算右移,相当于n/2
}
return exponent>=0?res:(1/res);
}