剑指offer系列——12.数值的整数次方

Q:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。
C:时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
T:
1.刚刚学习了快速幂,正好用上:https://www.cnblogs.com/xym4869/p/12240806.html
这个题要注意,exponent可能为负。
A:

    double Power(double base, int exponent) {
        double num = 1.0;
        if(exponent<0){
            base = 1/base;
            exponent = -exponent;
        }
        while (exponent) {
            if (exponent & 1) {
                num = base * num;
            }
            base *= base;
            exponent >>= 1;
        }
        return num;
    }

2.直接内部函数调用:

   double Power(double base, int exponent) {
        return pow(base, exponent);
    }

3.暴力法:

    double Power(double base, int exponent) {
        double num = 1.0;
        if(exponent<0){
            base = 1/base;
            exponent = -exponent;
        }
        while(exponent--)
            num = base * num;
        return num;
    }

4.递推法:

    double Power(double base, int exponent) {
        if(exponent == 0)
            return 1;
        if (exponent < 0) {
            base = 1 / base;
            exponent = -exponent;
        }
        return base * Power(base, exponent - 1);
    }

原文地址:https://www.cnblogs.com/xym4869/p/12246315.html

时间: 2024-11-08 06:54:41

剑指offer系列——12.数值的整数次方的相关文章

[剑指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 13:数值的整数次方

题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和exponent不同时为0 问题分析 计算一个浮点数的整数次方,主要考察的是对输入数据的完整性的预估能力.针对此问题,输入数据可能存在以下情况: 1.底数不为0,指数都为整数 2.底数不为0,指数都为负数 3.底数为0,指数为负数(出现零除情况) 4.底数为0,指数为正数(给定特殊值0或1) 代码实现的逻辑并不复杂,主要是需要考虑到所有可能存在的输入情况,同时需

剑指offer系列10---数值的整数次方

[题目]给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. * [思路]主要是考虑幂的正负数以及等于0三种情况.但是在处理的时候要考虑细致,底数等于0时无意义,这时候应该报异常. 下面给出版本一: 1 package com.exe3.offer; 2 3 /** 4 * [题目]给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 5 * [思路]主要是考虑幂的正负数以及等于0

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

题目 给定一个double类型的浮点数base和int类型的整数exponent,求base的exponent次方 保证base和exponent不同时为0. 1.用内置函数pow 语法: class Solution: def Power(self, base, exponent): # write code here if base == 0: return 0 elif exponent == 0: return 1 elif base == 1: return 1 elif expone

剑指Offer系列之题11~题15

目录 11.矩形覆盖 12.二进制中1的个数 13. 数值的整数次方 14.调整数组顺序使奇数位于偶数前面 15.链表中倒数第k个结点 11.矩形覆盖 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 比如n=3时,2*3的矩形块有3种覆盖方法: 斐波那契数列的应用 第一次竖着放一块类比为走一步,第一次横着放两块类比为走两步 代码与上面的斐波那契数列类题目类似,此处不再赘述:剑指Offer系列之题6~题10. 12.

剑指offer系列4:斐波那契数列

剑指offer第九题,这个题很古老了.第一个想到的肯定是递归,很简单. 1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 class Solution { 5 public: 6 int Fibonacci(int n) { 7 if (n == 0) 8 { 9 return 0; 10 } 11 if (n==1||n==2) 12 { 13 return 1; 14 } 15 else 16 {

剑指offer系列10:合并两个排序的链表

我拿到这个题的时候举的例子是链表1:1.3.5.7和链表2:2.4.6.8.我的思路是以:1为基础,将表2的每个结点插入表1.也就是说我一次性是要给新建立的链表中加入两个元素,分别是两个原始链表的头结点.这个思路我做了半天头脑一片混乱,中间指针实在不知道怎么弄了.于是我去睡了一觉,哈哈,我大概是这个世界上最会逃避的人了…… 看了答案使用了递归的方法,其实我做的时候我有想到要用递归,但是没用的原因是我一般写代码不喜欢用递归,原因有两个,一个是递归容易死循环,一个是递归的复杂度太高.但这道题真的太适

剑指offer系列47:堆成的二叉树

这个题的主要思路是: 用二叉树的左子树的右子树和右子树的左子树比较,再用左子树的左子树和右子树的右子树比较.(好像有点绕,但其实就是堆成的思想) 剑指offer的说法是用数的前序遍历的两个方法,前序遍历应该是:根->左->右.但是我们用另一种前序遍历:根->右->左.如果这两个序列一样就判断它是对称的. 这两个方法在实现上其实是一样的. 1 class Solution { 2 public: 3 bool isSymmetrical(TreeNode* pRoot) 4 { 5

剑指offer系列——48.不用加减乘除做加法

Q:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. T: 1.使用进制. 两个数异或:相当于每一位相加,而不考虑进位: 两个数相与,并左移一位:相当于求得进位: 将上述两步的结果相加 首先看十进制是如何做的: 5+7=12,三步走 第一步:相加各位的值,不算进位,得到2. 第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果. 第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12. 同样我们可以用三步走的方