牛客链接
题目
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0。不得使用库函数,同时不需要考虑大数问题,也不用考虑小数点后面0的位数。
解题思路
分析所有情况进行输出。
如果base == 0,那么直接返回0即可。
如果exponent == 0,返回1。
如果exponent < 0,base = 1/base,exponent = - exponent(底数变为正值,但结果不变)
如果exponent > 0,无需操作。(注意变量的保存 将exponent赋值给n,result保存结果)
判断n&1是否为1,如果是,则说明exponent最后一位是1(也是奇数),直接将最后一位二进制的值乘进结果 res = res * n;
因为要将exponent的二进制值向右移一位,继续判断下一个末尾数字是否为1,所以在此之前要将 base值翻倍 base = base * base;
然后将exponent的二进制向右移一位,继续判断下一个末尾数字。
直到exponent为0停止 得到的res即是结果。
代码实现
public class Solution {
public double Power(double base, int exponent) {
if(base == 0) return 0;
double res = 1;
long n;
if(exponent>0) {
n = exponent;
}else if(exponent < 0) {
base = 1/base;
n = -exponent;
}else{
return 1;
}
while(n!=0) {
if((n&1)==1){
res *= base;
}
base*=base;
n>>=1;
}
return res;
}
}