码农小汪-剑指Offer之10 - 数值的整数次方 快速幂
2016-03-31 10:18
465 查看
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。题解:
对于浮点数的指数处理,首先想到,暴力处理!注意我指数的正负的结果,对于我们的后来的过程是有影响的!
1./result 为负数的时候,正的直接就是result;
分而治之的手段,想到了快速幂的处理思路,减少了我们乘法的次数,提高了效率
代码
package JianzhiOffer; /** * * @author JetWang * */ public class Slution10 { /** * 题目描述 * * 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 * * @param args */ public double Power(double base, int exponent) { /** * 解决的思路,根据exponent 的正负0 进行判断入手 */ if (exponent == 0) { return 1; } else if (exponent > 0) { double result = base; for (int i = 1; i < exponent; i++) { result = result * base; } return result; } else { double result = base; exponent = Math.abs(exponent); for (int i = 1; i < exponent; i++) { result = result * base; } return 1.0 / result; } } public double Power1(double base, int exponent) { /** * 快速幂进行处理,也是需要区分我们的正负的,减少我们的乘法的次数 这个是一个分话为小的来处理 */ double result = 1.0; int flag = exponent > 0 ? 1 : 0; exponent = Math.abs(exponent); while (exponent != 0) { if ((exponent & 1) == 1) { result *= base; } base *= base; exponent = exponent >> 1; } /** * 8 4 2 1 & 1 存在的话,必须的增加一个base 应为向右移动一次的话,我么你的base的价值增大为以前的两倍了,在这个基础上的 * 毕竟我么的右移动缩小了两倍,固然结果增加两倍 */ return flag > 0 ? result : 1.0 / result; } }
相关文章推荐
- 码农小汪-剑指Offer之9 - 二进制中1的个数 算数右移 逻辑左移
- 求字符串中数字之和
- 码农小汪-剑指Offer之8 - 两个栈实现队列
- 码农小汪-剑指Offer之7 - 重建二叉树(根据前序遍历中序遍历求二叉树)
- 码农小汪-剑指Offer之6 - 打印链表格
- LeetCode之旅(15)-Odd Even Linked List
- 面试互联网企业Android开发工程师的一些面试题
- algrothm_面试
- java基础面试题:冒泡排序
- java基础面试题:String和StringBuffer的区别
- 求职宝典 第一章 数组
- 互联网公司java面试题
- mysql基础知识理解和sql题讲解分析面试实战(三)之group_concat
- mysql基础知识理解和sql题讲解分析面试实战(四)之函数讲解和字符串的操作
- 笔记1-从毕业生到程序员:使用C#开发商业软件
- 笔记2-从毕业生到程序员:使用C#开发商业软件
- 笔记3-从毕业生到程序员:使用c#开发商业软件
- 笔记4-从毕业生到程序员:使用c#开发商业软件
- STL面试题
- 码农小汪-剑指Offer之5 -替换空格