[剑指offer] 浮点数的整数次方

题目描述

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

输入描述

base,exponent

输出描述

base的exponent次方

题目分析

  

  首先要注意,指数正负和零的情况判别:

  

  ①任何数的0次方等于0

  ②0不能做除数(也就是指数为负时,基数不能为0)

解法一  运行时间:27ms 占用内存:636k 

public class Solution {
    public double Power(double base, int exponent) {

        int flag = exponent;//接下来exponent会改变

        if(exponent==0){
            return 1;
        }
        if(exponent<0){
            exponent = -exponent;

            if(base==0){
            throw new RuntimeException("分母不能为0");
          }
        }
        double result = 1;
        for(int i=0;i<exponent;i++){
            result*=base;
        }

         return flag < 0 ? 1 / result : result;
  }
}

解法二  运行时间:30ms 占用内存:510k

 把指数以二进制的形式表达:

 

举例(10^13)有10^1101 = 10^0001*10^0100*10^1000。

通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。

public class Solution {
    public double Power(double base, int exponent) {

        int flag = exponent;//接下来exponent会改变
        if(exponent==0){
            return 1;
        }
        if(exponent<0){
            exponent = -exponent;

            if(base==0){
            throw new RuntimeException("分母不能为0");
           }
        }

        double result = 1;
        while(exponent!=0){
            if((exponent&1)==1){
                result*=base;
            }
            exponent>>=1;
            base *=base;  //指数右移一位,底数翻倍
        }

         return flag < 0 ? 1 / result : result;
  }
}

解法三  运行时间:33ms  占用内存:629k

  调用库函数

public class Solution {
    public double Power(double base, int exponent) {
        return Math.pow(base,exponent);
  }
}

因为pow最终会调用一个native方法,所以时间上还是可以的。

时间: 2024-11-09 05:13:45

[剑指offer] 浮点数的整数次方的相关文章

剑指offer——数值的整数次方

题目:给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 下面来看代码: public class PowerSolution { public static double Power(double base, int exponent) { //当底数为0,指数小于0,则为非法情况. if (equal(base,0.0)&&exponent<0) { return 0.0f; } //当指数小于0的时候即求该数的倒数再乘

剑指Offer-数值的整数次方

数值的整数次方 题目描述: ??给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 解题思路: ??注意判断输入的int类型的整数exponent是正数还是负数,0: 如果是正数,使用循环来让base自身乘exponent次,直接返回: 如果是负数,按照正数的方法得到结果result,然后返回1.0/result,.: 如果是0,直接返回1. 我的Java源代码: public class Solution { public doubl

剑指offer之关于整数的处理

首先是整数次方的处理 在这处理的时候有几个细节主义处理 1.当指数是负数的时候 2.当指数式0的时候 3.当不满足条件的时候要抛出异常 再一个就是常用的将一个树化为二进制的形式,或者是求整数的幂或者矩阵 的幂 这个函数写的时候是用递归来写的,所以要注意跳出来的条件,第二使用递归来实现,三,用&操作代替原来的求%的操作,而且在用之前都要考虑这个范围的问题,一般会说参数为n,可是这个n到底是多大呢,用相应的类型去求解相应规模的运算 ----------------------------------

12、剑指offer--数值的整数次方

题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 解题思路:首先要注意特殊情况的处理   base为0情况  exponent为0 为1情况  exponent为负数情况 1 #include <iostream> 2 using namespace std; 3 class Solution { 4 public: 5 //要注意的几点 6 //1.base == 0 7 //2.exponent == 0:==1 8

剑指offer-数值的整数次方-调整数组顺序使奇数位于偶数前面-代码的完整性-python

题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和exponent不同时为0 思路 求base的exponent次方,exponent有两种可能性, exponent>0 for循环exponent次,结果与base相乘 exponent<0 for循环exponent次,结果与base相除 输出结果: # -*- coding:utf-8 -*- class Solution: def Power(self

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

题目: 整数中1出现的次数(从1到n整数中1出现的次数) 链接: https://www.nowcoder.com/practice/bd7f978302044eee894445e244c7eee6?tpId=13&tqId=11184&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述: 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此

剑指offer—字符串转换整数

对于这个问题, 本题考查的实际上就是字符串转换成整数的问题,或者说是要你自行实现atoi函数.那如何实现把表示整数的字符串正确地转换成整数呢?以"345"作为例子: 当我们扫描到字符串的第一个字符'3'时,由于我们知道这是第一位,所以得到数字3. 当扫描到第二个数字'4'时,而之前我们知道前面有一个3,所以便在后面加上一个数字4,那前面的3相当于30,因此得到数字:3*10+4=34. 继续扫描到字符'5','5'的前面已经有了34,由于前面的34相当于340,加上后面扫描到的5,最终

剑指:数值的整数次方

题目描述 实现函数 double Power(double base, int exponent),求 base 的 exponent 次方. 不得使用库函数,同时不需要考虑大数问题. 注意: 不会出现底数和指数同为 0 的情况. 注意判断值数是否小于 0.另外 0 的 0 次方没有意义,也需要考虑一下,看具体题目要求. 样例1 输入:10 ,2 输出:100 样例2 输入:10 ,-2 输出:0.01 解法 解法一 public static double power(double base,

剑指Offer09 数值的整数次方

1 /************************************************************************* 2 > File Name: 09_Power.c 3 > Author: Juntaran 4 > Mail: [email protected] 5 > Created Time: 2016年08月29日 星期一 21时07分21秒 6 *********************************************