zoukankan      html  css  js  c++  java
  • 剑指offer---12-**--数值的整数次方

     
    题意
    给你一个 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.>>带符号移动的问题。
  • 相关阅读:
    当老板如何带团队?
    创业者第一法宝-了解自己
    交流才能交易,交易才能交心
    集合框架
    MySQL一些命令语法
    JS组成整理
    git中可以pull但是push提示Everything up-to-date的情况
    循环判断以及文件的使用--练习1
    Hello World !
    linux文件权限修改
  • 原文地址:https://www.cnblogs.com/buptyuhanwen/p/9377015.html
Copyright © 2011-2022 走看看