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;
    	}
  • 相关阅读:
    如何一次插入多条记录的SQL语句
    oracle 创建联合主键语句
    02-36 支持向量回归
    245 第三篇:Django-路由控制
    244 第二篇:Django简介
    243 第一篇:自定义Web框架
    242 第一篇:Http协议详细介绍
    02-34 非线性支持向量机(鸢尾花分类)+自定义数据分类
    241 第一篇:web应用
    240 vue学习【第6篇】:vue之导入Bootstrap
  • 原文地址:https://www.cnblogs.com/rosending/p/5617441.html
Copyright © 2011-2022 走看看