数值的整数次方-剑指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;
	}
时间: 2024-10-26 18:57:16

数值的整数次方-剑指Offer的相关文章

《剑指offer》题解

有段时间准备找工作,囫囵吞枣地做了<剑指offer>提供的编程习题,下面是题解收集. 当初没写目录真是个坏习惯(-_-)||,自己写的东西都要到处找. 剑指Offer - 九度1524 - 复杂链表的复制 剑指Offer - 九度1509 - 树中两个结点的最低公共祖先 剑指Offer - 九度1508 - 把字符串转换成整数 剑指Offer - 九度1504 - 把数组排成最小的数 剑指Offer - 九度1503 - 二叉搜索树与双向链表 剑指Offer - 九度1390 - 矩形覆盖 剑

【剑指offer】数值的整数次方

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25506085 剑指offer上的第十一题,九度OJ上测试通过. 题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 输入: 输入可能包含多个测试样例.对于每个输入文件,第一行输入一个整数T,表示测试案例的数目,接下来的T行每行输入一个浮点数base和一个整数exponent,两个数中间用一个空格隔开. 输出: 对应每

[剑指offer]Q11:数值的整数次方

pow(base, exponent) 考虑一下几种情况: base = 0, 那么直接返回0 base = 1, 那么直接返回1 exponent = 0, 那么直接返回1, 注意base= 0 exponent = 1, 那么直接返回 base exponent  为正为负 的情况 主要考察的点是将问题缩减,用折半的思想.这个题细节还是很多的,为了便于验证,leetcode上恰好有这个题,建议在线AC一下. def equal(self, a, b): return abs(a - b) <

《剑指Offer》题目:数值的整数次方

题目描述:数值的整数次方给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 题目分析:题目的关键在于要考虑exponent为负数的情况. Java代码: public class Power { public static double power(double base, int exponent) { double res = 1.0; if(exponent == 0){ return 1.0; } if(exponent > 0

《剑指offer》第十六题(数值的整数次方)

// 面试题:数值的整数次方 // 题目:实现函数double Power(double base, int exponent),求base的exponent // 次方.不得使用库函数,同时不需要考虑大数问题. #include <iostream> #include <cmath> using namespace std; bool g_InvalidInput = false;//使用全局变量作为错误处理方式 bool equal(double num1, double nu

剑指Offer对答如流系列 - 数值的整数次方

面试题15:数值的整数次方 题目描述 实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 问题分析 三思而后行,这道题如果没事实现考虑好,非常容易出错. 首先分析列举出所有的场景. base的值 可能为正数也可能为负数(包含整数.小数) exponent的值可能为正整数也可能为负整数 base的值的处理是比较简单的,对于exponent的处理就要多加考虑了. 当exponent的值为负

剑指Offer--第16题 数值的整数次方

第16题 数值的整数次方 题目:给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 思路 看到有点懵,第一感觉觉得是不是应该考虑0的0次或者负数情况,还有就是浮点类型没办法使用"="号,最后自己以偷懒的方式直接调用Java的API,如果面试题中不让调用库函数,那么基本上这题就是挂了可能. 以上题目描述来自牛客,没有对使用做限制.真正的剑指offer上有限制条件不得使用库函数,同时不需要考虑大数问题. 自己的low代码 publ

【Offer】[16] 【数值的整数次方】

题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 思路分析 要考虑到指数为负数的情况,而且指数为负数的时 base不能为0,因为指数为负数时,是指数的绝对值次幂的倒数,(分母不能为0),考虑到这些情况之后,就可以转化为求exponent的绝对值 次幂的问题,即指数为正数的情况 现在考虑如何求数值的整数次幂(指数为正数的情

剑指offer之【表示数值的字符串】

题目: 表示数值的字符串 链接: https://www.nowcoder.com/practice/6f8c901d091949a5837e24bb82a731f2?tpId=13&tqId=11206&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述: 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100",&quo