题意
给你一个 base底数,一个指数exponent求出最后的结果。
分析
//上来判断base有负数,0,正数;exponent有负数,0,正数
//其中的特殊情况包括:
//1.异常情况,0的负数次方
//2.指数为0的情况
//3.底数为负数的情况
//4.正常情况
代码
public class Solution {
public double Power(double base, int exponent) throws Exception{
if(equal(base,0.0)&&exponent<0)throw new Exception(“0没有负数指数的情况”);
if(exponent==0)return 1;
if(exponent<0)return getResult(1.0/base,-exponent);
return getResult(base,exponent);
}
//求出最后的结果,这里的问题是如何简化次方的计算方式。使用平方的方式计算会更简单一些
public double getResult(double base,int exponent){
if(exponent==0)return 1;
if(exponent==1)return base;
double result = getResult(base,exponent>>1);
result = result *result;
if((exponent&1)==1)result*=base;
return result;
}
//因为计算机表示小数是会有误差的不能够直接使用==判断
//如果两个小数的绝对值差小于0.0000001,那么说明相等,也就是-0.0000001<distance<0.0000001
public boolean equal(double num1,double num2){
if(-0.0000001<(num1-num2) && (num1-num2)<0.0000001){
return true;
}else{
return false;
}
}
}
总结的细节:
1.double类型的数据如何判断相等:绝对值的差距<0.0000001的时候默认相等,不能够像int类型一样简单的使用==来判断。而且绝对值差距<0.0000001就是大于-0.0000001并且小于0.0000001
2.判断某个数是否为奇数还是偶数的方式,就是通过将这个数和1做与操作得出结果。
3.>>带符号移动的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101523.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】:
Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】:
官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...