剑指offer 数值的整数次方
题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。
代码:
1 class Solution { 2 public: 3 double Power(double base, int exponent) { 4 if(base == 0) 5 return 0; 6 if(exponent == 0) 7 return 1; 8 int n = exponent; 9 if(n < 0) 10 n = abs(n); 11 double res = 1; 12 while(n != 0){ 13 if( (n&1) == 1) 14 res *= base; 15 base *= base; 16 n >>= 1; 17 } 18 return exponent > 0 ? res : (1/res); 19 } 20 };
我的笔记:
链接:https://www.nowcoder.com/questionTerminal/1a834e5e3e1a4b7ba251417554e07c00
来源:牛客网
* 1.全面考察指数的正负、底数是否为零等情况。
* 2.写出指数的二进制表达,例如13表达为二进制1101。
* 3.举例:10^1101 = 10^0001*10^0100*10^1000。
* 4.通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。