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

题目

实现double Power(double base, int exponent),求base的exponent次方,不得使用库函数,同样需要考虑大数问题。

思路

题目意思很清楚,需要考虑情况周全。

1、若base=0,exp <= 0

2、若exp >= 0 , 直接return计算后的数值

  若exp <= 0 ,return 计算后数值的倒数

注意定义是double,因此写代码时要写成0.0,1.0

class Solution {
public:

    double Power(double base, int exponent) {
        if(base == 0.0 && exponent < 0) return 0.0;

        if (exponent >= 0){
            return PowerWithUnsignedExponent(base, exponent);
        }
        else{
            return (1.0 / PowerWithUnsignedExponent(base, -exponent));
        }
    }

    double PowerWithUnsignedExponent(double base, unsigned int exponent){
        if (exponent == 0) return 1.0;
        if (exponent == 1) return base;

        double result = PowerWithUnsignedExponent(base, exponent>>1);
        result *= result;
        if (exponent & 1) //判断指数是否为奇数
        {
            result *= base;
        }
        return result;
    }
};

改进

计算幂时可以用快速幂,思想如下:

class Solution {
public:
  double Power(double base, int exponent) {
    if(base == 0.0 && exponent < 0)      return 0.0;

    if (exponent >= 0){
      return PowerWithUnsignedExponent(base, exponent);
    }
    else{
      return (1.0 / PowerWithUnsignedExponent(base, -exponent));
    }
  }

  double PowerWithUnsignedExponent(double base, unsigned int exponent){
    if (exponent == 0)      return 1.0;
    if (exponent == 1)       return base;    return (PowerWithUnsignedExponent(base, exponent>>1) * PowerWithUnsignedExponent(base, exponent>>1) * PowerWithUnsignedExponent(base, exponent%2));
    }
};

原文地址:https://www.cnblogs.com/shiganquan/p/9338962.html

时间: 2024-11-01 20:53:05

【剑指offer】16、数值的整数次方的相关文章

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

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

剑指Offer 12. 数值的整数次方 (其他)

题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 题目地址 https://www.nowcoder.com/practice/1a834e5e3e1a4b7ba251417554e07c00?tpId=13&tqId=11165&tPage=1&rp=3&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-

剑指offer:数值的整数次方

题目描述给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. class Solution: def Power(self, base, exponent): # 任何数的0次方都是1 if exponent == 0: return 1 # 0的任何次方(除了0的0次方)都为0 if base == 0: return 0 # 先记录指数符号 sign = exponent > 0 exponent = abs(exponent) re

剑指offer (11) 数值的整数次方

利用create groups for any added folders 这样的方式表示的是将所有的资源都放在资源包得路径下,没有层次的概念利用create folder references for any added folders这样的表示方式是在按照原来文件夹的方式将他们放入到安装包中的.在安装包中有几个这样的文件夹:(这些文件都是位于家路径下的)(1)Documents: 该文件夹用于程序数据文件写入到该目录下,用于存储用户数据以及需要备份的数据.(2)Library:include

牛客网习题剑指offer之数值的整数次方

分析: 要考虑到exponent为0和负数的情况. 如果base是0并且exponent是负数的时候呢?那就发生除0的情况了. AC代码: public class Solution { public double Power(double base, int exponent) { if(exponent == 0) return 1; if(Math.abs(base) <= 0.000000000000001) return 0; boolean reverseFlag = exponen

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

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

【剑指offer】字符串转整数

转载请注明出处:http://blog.csdn.net/ns_code/article/details/28015693 题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入: 输入可能包含多个测试样例.对于每个测试案例,输入为一个合法或者非法的字符串,代表一个整数n(1<= n<=10000000). 输出: 对应每个测试案例,若输入为一个合法的字符串(即代表一个整数),则输出这个整数.若输入为一个非法的字符串,则输出"My God". 样

16. 数值的整数次方

面试题16. 数值的整数次方 实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 示例 1: 输入: 2.00000, 10 输出: 1024.00000 示例 2: 输入: 2.10000, 3 输出: 9.26100 示例 3: 输入: 2.00000, -2 输出: 0.25000 解释: 2-2 = 1/22 = 1/4 = 0.25 说明: -100.0 < x < 100

16 数值的整数次方 (第3章 高质量的代码)

题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 不只要通过测试,要更着重代码的优化 测试用例: base与exponent分别取正数.0.负数  共3*3九种情况 解题思路: 1)为base与exponent区分正数.0.负数  全面但是不够高效率的解法 class Solution { public: bool g_InvalidInput = false; double Pow

菜鸟系列 Golang 实战 Leetcode —— 面试题16. 数值的整数次方

实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. ? 示例 1: 输入: 2.00000, 10 输出: 1024.00000 示例?2: 输入: 2.10000, 3 输出: 9.26100 示例?3: 输入: 2.00000, -2 输出: 0.25000 解释: 2-2 = 1/22 = 1/4 = 0.25 ? 说明: -100.0 <?x?< 100.0 n?是 32 位