数值的整数次方
来源:互联网 发布:garageband软件下载 编辑:程序博客网 时间:2024/05/17 01:50
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
算法:
1、考虑指数可能为负数或0;考虑底数可能为0的情况
2、由于计算机表示小数(包括float 和 double型小数)都有误差,不能直接使用等号判断相等。如果浮点型数差的绝对值很小,可认为相等。
3、乘法可以用左移2代替 n<<2
除法可以用右移2代替 n>>2
4、优化整数次方,32 为 16和16结果相乘,33为16和16相乘再乘以底数一次。每次都是讲指数拆分成一半
这样将时间复杂度降低一半。
class Solution {public: double Power(double base, int exponent) { if(DoubleEqule(base,0)) if(exponent == 0) return 1; else return 0; bool flag = exponent<0; exponent = abs(exponent); double result = 1; /*for (int i = 0; i < exponent; i++) { result = result * base; }*/ result = helper(base,exponent); if(flag) result = 1/result; return result; } double helper(double base,int exponent){ if(exponent == 0) return 1; if(exponent == 1) return base; //将指数每次除2用右移代替,增加效率 double result = helper(base,exponent>>1); result = result*result; //将求余符号%用&1代替 if(exponent & 1) result = result * base; return result; } bool DoubleEqule(double n1,double n2){ if(abs(n1) - abs(n2) < 0.0001) return true; else return false; }};
0 0
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- Java常用类库——正则表达式
- 排序算法比较
- Java 设计模式——外观模式
- windows下mongodb分片设置与集群搭建
- Android_Scroller滑动动画
- 数值的整数次方
- ios中framework 运行测试提示test failed
- [ElasticSearch]term 精确匹配 中文字符串短语
- Android之MediaPlay播放视频
- 路由器开发相关知识总结 —— 以太网PHY芯片
- JZOJ 3441. 小喵喵的新家
- Java入门
- ubuntu16.04+hadoop2.7.2+hive1.2.1 server2通过jdbc连接
- HTTP中GET和POST的区别