剑指offer 13:数值的整数次方

题目描述

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

保证base和exponent不同时为0

问题分析

计算一个浮点数的整数次方,主要考察的是对输入数据的完整性的预估能力。针对此问题,输入数据可能存在以下情况:

1.底数不为0,指数都为整数

2.底数不为0,指数都为负数

3.底数为0,指数为负数(出现零除情况)

4.底数为0,指数为正数(给定特殊值0或1)

代码实现的逻辑并不复杂,主要是需要考虑到所有可能存在的输入情况,同时需要注意,对于浮点数,是不可以直接使用“==”直接对两数进行比较的。

下面给出C++代码实现:

class Solution {
public:
    double Power(double base, int exponent) {//排除零除的情况出现
        if(std::abs(base-0.0)<(1e-4) && exponent<0){return 0.0;
        }
        bool isnegative=(exponent<0)? true:false;
        if(isnegative){
          return 1.0/calc_power(base,-exponent);
        }
        else{
            return calc_power(base,exponent);
        }
    }
    double calc_power(double base,int unsignedexp){
        double res=1.0;
        for (int i=0;i<unsignedexp;i++){
            res*=base;
        }
        return res;
    }    
};

如果希望提高 calc_power函数的计算效率,可以使用如下递归的实现方法,时间复杂度从O(n)降到O(logn),但栈递归的空间复杂度也变为O(logn)

double calc_power(double base,int unsignedexp){
        //log(n)时间复杂度,同样递归深度也为log(n)
        if (unsignedexp==0){
            return 1.0;
        }
        if (unsignedexp==1){
            return base;
        }
        double result = calc_power(base, unsignedexp>>1);
        result*=result;
        if((unsignedexp & 0x1)==1){
            result*=base;
        }
        return result;
    }

原文地址:https://www.cnblogs.com/fancy-li/p/11613810.html

时间: 2024-09-30 10:52:22

剑指offer 13:数值的整数次方的相关文章

【剑指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之数值的整数次方

分析: 要考虑到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 (11) 数值的整数次方

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

剑指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". 样

刷题13 数值的整数次方

描述:  给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 之前没刷过类似的题, 很明显先想到循环相乘,那就O(n)复杂度了. 有想过分解开进行乘,感觉需要什么东东来优化一下步骤. 这是一个关于快速幂的知识,其实就是将幂转换成二进制形式, 比如说对于 ab,b 等于 9, 9 的二进制是 1001 , 然后 ab 就等于 a20 * a23 ,等效变换为 (a)2 * (a22)2 . 所以这样就好办了, 幂转换成二进制有几位就循环几

剑指offer(四十)之整数中1出现的次数(从1到n整数中1出现的次数)

题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了.ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数. 代码1: <span style="color:#6600cc;">public class Solution { public int NumberOf1Between1AndN_S