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

    数值的整数次方

    题目描述

    给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

    思路

    1. 主要有几点需要注意
    • 由于计算机表示小数(float和double)都有误差,不能直接用等号(==)判断两个小数是否相等。若两个小数的差的绝对值很小,比如小于0.0000001,就可以认为它们相等
    • 注意考虑输入值得全面性,正负可能,而且0的负数次幂没意义。

    代码

    解法一:

    public class Solution {
      public double Power(double base, int exponent) {
    		if (equal(base, 0.0) && exponent < 0) {
    			return 0.0;
    		}
    		int absExp = exponent;
    		if (exponent < 0){
    			absExp = -exponent;
    		}
    		double result = 1.0;
    		for (int i = 1; i <= absExp; i++) {
    			result *= base;
    		}
    		if (exponent < 0) {
    			result = 1.0 / result;
    		}
    		return result;
    	}
    	public boolean equal(double num1, double num2) {
    		if ((num1 - num2 > -0.0000001) && (num1 - num2) < 0.0000001) {
    			return true;
    		} else {
    			return false;
    		}
    	}
    }

    解法二:

    通过递归实现,每次次幂翻倍的乘,可以减少乘法计算的次数,但是注意使用递归前仍然要对输入做必要的检查

    public double Power01All(double base, int exponent) {
    		if (equal(base, 0.0) && exponent < 0) {
    			return 0.0;
    		}
    		int absExp = exponent;
    		if (exponent < 0) {
    			absExp = -exponent;
    		}
    		double result = Power01(base, absExp);
    		if (exponent < 0) {
    			result = 1 / result;
    		}
    		return result;
    		
    	}
    	public double Power01(double base, int exponent) {
    		if (exponent == 0) {
    			return 1;
    		}
    		if (exponent == 1) {
    			return base;
    		}
    		double result = Power01(base, exponent >> 1);
    		result *= result;
    		if ((exponent & 0x1) == 1) {
    			result *= base;
    		}
    		return result;
    	}
  • 相关阅读:
    Redis 如何保证缓存与数据库双写时的数据一致性
    Redis 缓存雪崩和缓存穿透问题
    Redis 的并发竞争 Key 问题
    【转】intelliJ IDEA集成checkStyle
    【转】hadoop深入研究:(十一)——序列化与Writable实现
    【转】Hadoop在MapReduce中使用压缩详解
    【转】JDK工具jinfo用法详解
    【转】JVM统计监控工具-jstat
    【转】jps命令使用
    基于MLlib的机器学习--协同过滤与推荐
  • 原文地址:https://www.cnblogs.com/rosending/p/5617441.html
Copyright © 2011-2022 走看看