【剑指offer】58.数值的整数次方
总目录:
1.问题描述
实现函数 double Power(double base, int exponent),求base的exponent次方。
注意:
1.保证base和exponent不同时为0。
2.不得使用库函数,同时不需要考虑大数问题
3.有特殊判题,不用考虑小数点后面0的位数。
数据范围:∣base∣≤100 ,∣exponent∣≤100 ,保证最终结果一定满足∣val∣≤104
进阶:空间复杂度 O(1) ,时间复杂度 O(n)
进阶:空间复杂度 O(1) ,时间复杂度 O(n)
2.问题分析
对于Power(double base, int exponent)
1联乘法
当exponent为正时,将exponent个base联乘起来;当exponent为负时,将|exponent|个1/base联乘起来。
尤其是当base==0时返回0,exponent==0时,返回1.
2快速幂
计算幂运算,我们还可以使用快速幂计算。
规则如下,详见设计巧妙的代码:

3.代码实例
联乘法
1 class Solution { 2 public: 3 double Power(double base, int exponent) { 4 if (base == 0) { 5 return 0; 6 } 7 if (exponent == 0) { 8 return 1; 9 } 10 11 //处理负指数 12 if (exponent < 0) { 13 base = 1 / base; 14 exponent = -exponent; 15 } 16 17 return base * Power(base, exponent - 1); 18 } 19 };
快速幂
1 class Solution { 2 public: 3 double Pow(double x, int y) { 4 double ret = 1; 5 while (y) { 6 //如果y是奇数 7 if (y & 1) { 8 ret *= x; 9 } 10 11 //指数折半,底数平方 12 y = y >> 1; 13 x *= x; 14 } 15 16 //更巧妙的在于ret *= x不仅联乘了中间指数为奇数时的x,且兜住了底 17 return ret; 18 } 19 20 double Power(double base, int exponent) { 21 if (exponent < 0) { 22 base = 1 / base; 23 exponent = 0 - exponent; 24 } 25 26 return Pow(base, exponent); 27 } 28 };
本文作者:啊原来是这样呀
本文链接:https://www.cnblogs.com/OhOfCourse/p/16945103.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步