【快速幂】剑指 Offer 16. 数值的整数次方

这篇具有很好参考价值的文章主要介绍了【快速幂】剑指 Offer 16. 数值的整数次方。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【快速幂】剑指 Offer 16. 数值的整数次方

题目描述

实现 pow(x, n) ,即计算 x 的 n 次幂函数(即, x n x^n xn)。不得使用库函数,同时不需要考虑大数问题。

提示:

− 100.0 < x < 100.0 -100.0 < x < 100.0 100.0<x<100.0
− 2 31 < = n < = 2 31 − 1 -2^{31} <= n <= 2^{31}-1 231<=n<=2311
− 1 0 4 < = x n < = 1 0 4 -10^4 <= x^n <= 10^4 104<=xn<=104

快速幂思想

对于 x n x^n xn可以视为 x n = x n / 2 ∗ x n / 2 x^n=x^{n/2}*x^{n/2} xn=xn/2xn/2

  • n / 2 {n/2} n/2为偶数时, x n = ( x n / / 2 ) 2 x^{n}=(x^{n//2})^2 xn=(xn//2)2
  • n / 2 {n/2} n/2为奇数时, x n = ( x n / / 2 ) 2 ∗ x x^{n}=(x^{n//2})^2*x xn=(xn//2)2x

其中 n / / 2 n//2 n//2表示 n n n整除 2 2 2的结果

所以,我们可以设置一个变量res=1;初始状态 x n = x n ∗ r e s x^{n}=x^n*res xn=xnres,每一次循环,令 x = x ∗ x x=x*x x=xx,即 n = n / 2 ∗ 2 n=n/2*2 n=n/22

  • n / 2 {n/2} n/2为偶数时, r e s = r e s ; x ∗ = x ; n / = 2 res=res;x*=x;n/=2 res=res;x=x;n/=2
  • n / 2 {n/2} n/2为奇数时, r e s = r e s ∗ x ; x ∗ = x ; n / = 2 res=res*x;x*=x;n/=2 res=resx;x=x;n/=2

当且仅当 n = 0 n=0 n=0时,退出循环。文章来源地址https://www.toymoban.com/news/detail-430893.html

题解

class Solution
{
public:
    double myPow(double x, int n)
    {
        long m=n;
        if (x == 0)
        {
            return 0;
        }
        if(1==x)
        {
            return x;
        }
        double res = 1;
        if (m < 0)
        {
            m = -m;
            x = 1 / x;
        }
        while (m)
        {
            if(m&1)
            {
                res*=x;
            }
            x*=x;
            m>>=1;
        }
        return res;
    }
};

到了这里,关于【快速幂】剑指 Offer 16. 数值的整数次方的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 剑指 Offer 20. 表示数值的字符串

    剑指 Offer 20. 表示数值的字符串 这是题目给出的定义,我们只需要按照题目给出的定义完成函数的编写即可 数值 (按顺序)可以分成以下几个部分: 若干空格 一个 小数 或者 整数 (可选)一个 \\\'e\\\' 或 \\\'E\\\' ,后面跟着一个 整数 若干空格 小数 (按顺序)可以分成以下几个部分

    2024年02月06日
    浏览(33)
  • 剑指 Offer 20. 表示数值的字符串 (正则 逐步分解)

    请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。 数值(按顺序)可以分成以下几个部分: 若干空格 一个 小数 或者 整数 (可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数 若干空格 小数(按顺序)可以分成以下几个部分: (可选)一个符号字符(‘+’

    2024年02月14日
    浏览(33)
  • Leetcode-每日一题【剑指 Offer 20. 表示数值的字符串】

      请实现一个函数用来判断字符串是否表示 数值 (包括整数和小数)。 数值 (按顺序)可以分成以下几个部分: 若干空格 一个  小数  或者  整数 (可选)一个  \\\'e\\\'  或  \\\'E\\\'  ,后面跟着一个  整数 若干空格 小数 (按顺序)可以分成以下几个部分: (可选)一个符号

    2024年02月13日
    浏览(36)
  • 【剑指offer专项突破版】整数篇(经典面试题)——C

    剑指offer专项突破版(力扣官网) —— 点击进入 本文所属专栏 ——点击进入 总结题目要求: 1.目的—— 实现除法 2.要求—— 不得使用 * / % 3.处理溢出—— -2 32 / - 1 返回2 31 - 1 4. 整数除法—— 向0取整 , 说明:在其他语言中,比如 Python的除法是相负无穷取整 的—— -7 /

    2024年02月07日
    浏览(33)
  • 【LeetCode-中等】剑指 Offer 67. 把字符串转换成整数(详解)

    写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续

    2024年02月15日
    浏览(37)
  • 【LeetCode】剑指 Offer Ⅱ 第1章:整数(5道题) -- Java Version

    题库链接 :https://leetcode.cn/problem-list/e8X3pBZi/ 题目 解决方案 剑指 Offer II 001. 整数除法 快速除 ⭐ 剑指 Offer II 002. 二进制加法 模拟:StringBuilder ⭐ 剑指 Offer II 003. 前 n 个数字二进制中 1 的个数 动规:res[i] = res[i (i-1)] + 1 ⭐ 剑指 Offer II 004. 只出现一次的数字 位运算:按位取模

    2024年02月15日
    浏览(37)
  • (其他) 剑指 Offer 67. 把字符串转换成整数 ——【Leetcode每日一题】

    难度:中等 写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可

    2024年02月09日
    浏览(38)
  • 【每日一题】Leetcode - 剑指 Offer 43. 1~n 整数中 1 出现的次数

    Leetcode - 剑指 Offer 43. 1~n 整数中 1 出现的次数 分解数字中的每一位,判断+记录 = 结果 But,超时了,下面是优化过程简介 空间换时间(爆内存) :n = 123456,则n{len-1} = 12345,其实走到n这里,说明n{len-1}这个数字我们一定已经知道了它有多少个1了,所以我们只需要记录保存下

    2024年02月11日
    浏览(37)
  • 【Leetcode -1290.二进制链表转整数 -剑指Offer 06.从尾到头打印链表】

    题目:给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。请你返回该链表所表示数字的十进制值 。 示例 1: 输入:head = [1, 0, 1] 输出:5 解释:二进制数(101) 转化为十进制数(5) 示例 2: 输入:head = [0] 输出:

    2023年04月26日
    浏览(25)
  • 刷题笔记【5】| 快速刷完67道剑指offer(Java版)

    本文已收录于专栏 🌻 《刷题笔记》 题目来源参考阿秀学长的刷题笔记,小戴只是把 C++的题解改成了 Java版本,并整理了其他思路,便于自己的学习~ 如果解题有更好的方法,本文也会及时进行更新~ 希望对你有帮助~ 一起加油哇~ 牛客原题链接 输入两个递增的链表,单个链表

    2023年04月12日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包