算法学习记录十(C++)--->数值的整数次方
来源:互联网 发布:sqlserver 2008 64 编辑:程序博客网 时间:2024/05/20 06:23
描述
- 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
分析
1.普通方法,几次方就是乘以几次
2.位运算解法
普通解法
class Solution {public: double Power(double base, int exponent) { double ret = 1; if(exponent == 0){ return 1.0f; } else if(exponent < 0){ while(exponent!=0){ ret /= base; exponent++; } } else{ while(exponent!=0){ ret *= base; exponent--; } } return ret; }};
位运算
- 1.全面考察指数的正负、底数是否为零等情况。
- 2.写出指数的二进制表达,例如11表达为二进制1011。
- 3.举例:10^1011 = 10^0001*10^0010*10^1000。
- 4.通过&1和>>1来逐位读取1011,为1时将该位代表的乘数累乘ret到最终结果。 每位移一次都要翻倍
class Solution {public: double Power(double base, int exponent) { double ret = 1.0f; // 初始 double cur = base; int ex = 0; if(exponent==0){ return 1.0f; } else if(exponent>0){ ex = exponent; } else{ // 负数的时候分母要处理下 if(base==0){}; ex = -exponent; } // 指数位运算向右移动,不等于0的时候累乘 while(ex){ // 位运算中遇到1代表一次累乘 // 3.举例:10^1011 = 10^0001*10^0010*10^1000。 if((ex&1)==1){ ret *= cur; } // 每次位移都要翻倍10^0,10^1,10^2,10^4,10^8 cur *= cur; // 这里一定要重新给ex赋值,不然死循环了 // ex>>1这样的话ex不会变的,没注意,会死循环 ex>>=1; } return exponent>0?ret:1/ret; }};
阅读全文
0 0
- 算法学习记录十(C++)--->数值的整数次方
- 面试算法(十)数值的整数次方
- 数值的整数次方(算法)
- 算法:数值的整数次方
- 【算法详解】求解数值的整数次方
- 算法题20 数值的整数次方
- 算法题目---数值的整数次方
- 【算法】求数值的整数次方
- 算法题/数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- Android版Motion Stills
- iOS 对象转化为字典
- 秒针自动变化
- runtime运行时 isa指针 SEL方法选择器 IMP函数指针 Method方法 runtime消息机制 runtime的使用
- CSS链接样式
- 算法学习记录十(C++)--->数值的整数次方
- java web开发为什么要使用框架
- LeetCode 99 Recover Binary Search Tree(Python详解及实现)
- java xml格式写入以及解析
- 如何定位APP上的webview控件
- 随机森林
- bitset(hdu 6085)
- java 对json操作的备忘
- php上传图片到七牛