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;
    	}
  • 相关阅读:
    memset功能的具体说明
    理解离散傅立叶变换(一. 傅立叶的起源变换)
    OutputCache说明
    二进制搜索
    UEditor用法
    —页面布局实例———win7自己的小算盘
    HDU 1698 Just a Hook (段树更新间隔)
    JDBC batch批量Statement executeBatch 详细解释
    Android ListView快速定位(三)
    Android ListView快速定位(二)
  • 原文地址:https://www.cnblogs.com/rosending/p/5617441.html
Copyright © 2011-2022 走看看