数值的整数次方
2015-09-28 23:20
239 查看
代码的完整性
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
注意:
1.由于计算机表示小数(包括float和double型小数)都有误差,我们不能直接用等号(==)判断两个小数是否相等。如果两个小数的差的绝对值很小,比如小于0.0000001,就可以认为他们相等。
2.考虑指数和底数分别为正数、负数和0的情况。
优化:用如下公式求a的n次方:
用右移运算符代替了除以2,用位与运算符代替了求余运算符(%)来判断一个数是奇数还是偶数。位运算的效率比乘除法及求余运算的效率要高很多。
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
注意:
1.由于计算机表示小数(包括float和double型小数)都有误差,我们不能直接用等号(==)判断两个小数是否相等。如果两个小数的差的绝对值很小,比如小于0.0000001,就可以认为他们相等。
2.考虑指数和底数分别为正数、负数和0的情况。
java: public class Solution { boolean InvalidInput=false; public double Power(double base, int exponent) { InvalidInput=false; if(equal(base,0.0)&&exponent<0){ InvalidInput=true; return 0.0; } int absExponent=0; double result=1.0; if(exponent<0){ absExponent=-exponent; result=PowerWithUnsignedExponent(base,absExponent); } else{ result=PowerWithUnsignedExponent(base,exponent); } if(exponent<0){ result=1.0/result; } return result; } double PowerWithUnsignedExponent(double base,int exponent){ double result=1.0; for(int i=1;i<=exponent;i++){ result*=base; } return result; } boolean equal(double num1,double num2){ if((num1-num2>-0.0000001)&&(num1-num2<0.0000001)) return true; else return false; } public static void main(String[] args) { Solution a=new Solution(); System.out.println(a.Power(2.1,3)); } }
优化:用如下公式求a的n次方:
用右移运算符代替了除以2,用位与运算符代替了求余运算符(%)来判断一个数是奇数还是偶数。位运算的效率比乘除法及求余运算的效率要高很多。
double PowerWithUnsignedExponent(double base,int exponent){ if(exponent==0)return 1; if(exponent==1)return base; double result=PowerWithUnsignedExponent(base,exponent>>1); result*=result; if((exponent & 0x1)==1) result*=base; return result; }
相关文章推荐
- React的React Native
- Linux shell篇---之二AWK
- 6. 高级类
- atlassian JIRA 插件开发(八) — MVC实现
- CentOS 6系统启动引导过程
- Hdoj 4081 Qin Shi Huang's National Road System(次小生成树)
- spring mvc 接收 put参数
- Xcode自动注释插件:VVDocumenter-Xcode
- 编译过程的五个阶段
- 程序员必备软件-小工具
- java去除重复的字符串和移除不想要的字符串
- 理解LSTM网络
- struts2上传文件的小例子
- Java对象池技术的原理及其实现
- JavaScript高级程序设计之数据类型
- 回溯 dp FatMouse and Cheese
- Python磁盘监控、日志分析监控脚本
- 如何改变Xcode字体大小?
- 2015年终总结
- java设计模式第16弹--访问者模式