剑指offer09-数值的整数次方

263 阅读1分钟

数值的整数次方

题目描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路1
  • 指数:(=0、>0、<0),循环实现。
  • 当底数(base)是零且指数是负数的时候。
程序(java)
     /**
     * code1
     * 时间复杂度:O(n)
     */
public class Solution {
    public double Power(double base, int exponent) {
        if (base == 0.0){
            return 0.0;
        }
        // 前置结果设为1.0,即当exponent=0 的时候,就是这个结果
        double result = 1.0d;
        // 获取指数的绝对值
        int e = exponent > 0 ? exponent : -exponent;
        // 根据指数大小,循环累乘
        for(int i = 1 ; i <= e; i ++){
            result *= base;
        }
        // 根据指数正负,返回结果
        return exponent > 0 ? result : 1 / result;
  }
}
思路2
  • 递归
程序(java)
     /**
     * code2
     * 时间复杂度:
     */
public class Solution {
    public double Power(double base, int exponent) {
    	int e = exponent > 0 ? exponent : -exponent;
    	double result = PowerWithExponent(base,e);
    	return exponent > 0 ? result : 1 / result;
  }
	double PowerWithExponent(double base,int exponent) {
        if(exponent==0)
            return 1.0;
        if(exponent==1)
            return base;
        double result=Power(base,exponent>>1);
        result*=result;
        if((exponent&0x1)==1)
           result*=base;
           return result;	
	}
}

补充

  1. 三目运算符

     数据类型  变量 = 关系运算符 ? 关系满足时的内容 : 关系不满足时的内容;
    
  2. Java中计算程序运行耗时的方法

    • 以毫秒为单位计算的:
    long startTime=System.currentTimeMillis();
    ...//运行程序略
    long endTime=System.currentTimeMillis();
    System.out.println("当前程序耗时:"+(endTime-startTime)+"ms");
    
    • 以纳秒为单位计算的:
    long startTime=System.nanoTime();
    ...//运行程序略
    long endTime=System.nanoTime();
    System.out.println("当前程序耗时:"+(endTime-startTime)+"ns");
    
  3. 浮点型