牛客网刷题之数值的整数次方
来源:互联网 发布:支付宝软件下载 编辑:程序博客网 时间:2024/06/05 16:33
题目描述:
解题思路:
其实,题目本身是没有难度的,只不过是要考虑周全,并在普通解法上进行优化就行了。分别考虑expont大于零以及小于零时,还有expont为零以及base为零的情况,加上条件语句就可以写好普通解法:
public double Power(double base, int exponent) throws Exception { double result = 1; if(base == 0){ throw new Exception("底数不能为0"); } else if(exponent == 0){ return 1; } else if(exponent > 0){ for(int i =1 ; i <= exponent ; i ++){ result *= base; } return result; }else{ for(int i = 1 ; i <= (-exponent) ; i ++){ result *= base; } return 1/result; } }
这种强解法的复杂度是O(n)的,当然还有稍微好一点的解法:
当n为偶数时 base^n = base^(n/2) * base^(n/2)
当n为偶数时 base^n = base^(n/2) * base^(n/2) *base,这样的话就可以递归求出(n/2)时的大小,最后只只需要判断传入的expont的奇偶行再进行一步运算就可以了。这样的话,复杂度就是O(logn)了。
题解:
public double Power(double base, int exponent) throws Exception { double result = 1; if(base == 0){ throw new Exception("底数不能为0"); } else if(exponent == 0){ return 1; } int n = exponent > 0 ? exponent : (-exponent); result = Power(base, n >> 1); result *= result; if((n &0x1) == 1){ result *= base; } return exponent > 0 ? result : 1/result; }
ac结果:
0 0
- 牛客网刷题之数值的整数次方
- 剑指Offer之数值的整数次方
- 剑指Offer之数值的整数次方
- 剑指Offer之 - 数值的整数次方
- 【剑指offer】之数值的整数次方
- c++之数值的整数次方
- 剑指offer之数值的整数次方
- 剑指offer之数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- Node.js中的模块机制
- Android中点击的四种写法
- 每天一个常用的linux命令(3)--mkdir
- 晚自习好难集中注意力 自己又默默在纸上写了两个程序
- TypeEvaluator例子,备忘
- 牛客网刷题之数值的整数次方
- C和指针读书笔记(第十章)
- top命令查看每个逻辑cpu使用率
- JS preventDefault ,stopPropagation ,return false
- 【各大OJ】最短路专题
- 数据结构实验之链表二:逆序建立链表
- loadrunner录制脚本时报错Unable to connect to remote server: rc = -1 , le = 0
- Spring 配置使用 - Bean 作用域
- Oracle存储过程以及java调用