leetcode50 快速幂

news2024/12/23 22:37:50
  • https://leetcode.cn/problems/powx-n/
  • 实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即, x n x^n xn )。
示例 1:

输入:x = 2.00000, n = 10
输出:1024.00000
示例 2:

输入:x = 2.10000, n = 3
输出:9.26100
示例 3:

输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/powx-n
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
    double myPow(double x, int n) {

    }
};

递归

a n { 1 ( n 为 0 ) a n − 1 ∗ a ( n 为奇 ) a n 2 ∗ a n 2 ( n 为偶 ) a^n \left\{\begin{array}{l} 1 (n为0)\\ a^{n-1}*a (n为奇) \\ a^{\frac{n}{2}}*a^{\frac{n}{2}} (n为偶) \end{array}\right. an 1(n0)an1a(n为奇)a2na2n(n为偶)

class Solution {
public:
    double quickMul(double x, long long N) {
        if (N == 0) {
            return 1.0;
        }
        if ( N % 2 == 0 ) {
            double y = quickMul(x, N / 2);
            return  y * y ;
        }else{
            double y = quickMul(x, N -1);
            return y * x;
        }
        
        
    }

    double myPow(double x, int n) {
        long long N = n;
        return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);
    }
};

非递归

a n ,因为题目中指出 n 为整数 , 可将 n 表示为二进制整数 n = b 0 ∗ 2 0 + b 1 ∗ 2 1 + … + b k ∗ 2 k ( b i = 0 或 1 ) a n = a b 0 ∗ 2 0 + b 1 ∗ 2 1 + … + b k ∗ 2 k = ( a 2 0 ) b 0 ∗ … ∗ ( a 2 k ) b k ( a 2 i ) 为底数,以上乘法的基础元素,所以可以用一个循环描述以上乘法 在循环中通过 ( a 2 i ) = ( a 2 i − 1 + 2 i − 1 ) = ( a 2 i − 1 ) ∗ ( a 2 i − 1 ) 计算 ( a 2 i ) 当对应的 n 的二进制数的 b i 为 1 时,将计算的值乘到结果中 a^n,因为题目中指出n为整数,可将n表示为二进制整数\\ n= b_0*2^0+b_1*2^1 + … + b^k*2^k (b_i =0或1)\\ a^n= a^{b_0*2^0+b_1*2^1 + … + b^k*2^k} = (a^{2^0})^{b_0} * … * (a^{2^k})^{b_k} \\ (a^{2^i}) 为底数,以上乘法的基础元素,所以可以用一个循环描述以上乘法\\ 在循环中通过(a^{2^i}) = (a^{2^{i-1} +2^{i-1} }) = (a^{2^{i-1} })* (a^{2^{i-1} }) 计算(a^{2^i})\\ 当对应的n的二进制数的b_i为1时,将计算的值乘到结果中 an,因为题目中指出n为整数,可将n表示为二进制整数n=b020+b121++bk2k(bi=01)an=ab020+b121++bk2k=(a20)b0(a2k)bk(a2i)为底数,以上乘法的基础元素,所以可以用一个循环描述以上乘法在循环中通过(a2i)=(a2i1+2i1)=(a2i1)(a2i1)计算(a2i)当对应的n的二进制数的bi1时,将计算的值乘到结果中

转二进制

int BinaryOfInt(int i)
{
      while(i)
      {
            if(i & 1)
            {
            	cout<< 1;
            }
            else
            {
             	cout<< 0;
             }

            i = i >> 1;
      }

      return count;
}
// 注 : 以上将int转为二进制只适用于int为正的情况,对输入的负数右移系统仍会保持开头的标志位,负的情况可参考这篇计算负数中有多少个1的文章,其左移1然后与输入数值与,即可计算输入数值的对应二进制的值 https://blog.csdn.net/sdujava2011/article/details/39298031
// 八进制 int 0123;    十六禁止 int 0x15A; 

题解

class Solution {
public:
    double quickMul(double x, long long N) {
         double res = 1.0;
         for(int i = N; i != 0; i>>=1){//  i /= 2
            if(i & 1){ // if(i % 2 != 0){
                res *= x;
            }
            x *= x;
        }
        return  res;
        
    }

    double myPow(double x, int n) {
        long long N = n;
        return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);
    }
};

在这里插入图片描述

  • 将循环中的int i = N ,int换为 long long

CG

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/518387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安全工程师必读 ——《安全技术工具扫盲》

安全技术 SAST - 静态应用安全测试&#xff08;白盒检测&#xff09;DAST - 动态应用安全测试&#xff08;黑盒检测&#xff09;IAST - 交互式应用安全测试&#xff08;灰盒检测&#xff09;RASP - 运行时应用自我保护Dependency Scanning&#xff08;依赖项安全扫描&#xff…

袋鼠云产品功能更新报告05期|应有尽“优”,数栈一大波功能优化升级!

这段时间&#xff0c;我们对产品本身以及客户反馈的一些问题进行了持续的更新和优化&#xff0c;包括对离线平台数据同步功能的更新&#xff0c;数据资产平台血缘问题的优化等&#xff0c;力求满足不同行业用户的更多需求&#xff0c;为用户带来极致的产品使用体验。 以下为袋…

边缘计算节点是啥?边缘计算与CDN有什么关系?一文带你了解边缘计算节点BEC(2)

上文已经为大家详细介绍了边缘计算节点 BEC 与 CDN 之间的关系&#xff0c;对于 CDN 而言&#xff0c;边缘计算不仅仅只增加了存储、计算的功能&#xff0c;还有网络、安全等等一系列的基础能力。 如果大家感兴趣&#xff0c;欢迎阅读我们上一篇文章 边缘计算节点是啥&#x…

如何在pythonanywhere上部署Django项目?

PythonAnywhere是一个基于云的Python开发平台&#xff0c;它允许用户在云端运行、开发和部署&#xff0c;该平台提供了Python编程环境、Web框架、数据库和Web服务器等工具&#xff0c;让用户可以轻松地创建和部署Python应用程序。PythonAnywhere还提供了免费和付费的服务&#…

Java设计模式其一(概述、UML图、软件设计模式) | 穷其道者,归处亦同

文章目录 1. 设计模式概述1.1 软件设计模式的概念1.2 学习设计模式的必要性1.3 设计模式分类 2. UML图2.1 类图概述2.2 类图的作用2.3 类图的表示法2.3.1 类的表达方式2.3.2 类与类之间关系的表达方式 3. 软件设计原则3.1 开闭原则3.2 里氏替换原则3.3 依赖倒转原则3.4 接口隔离…

Java【多线程基础6】定时器的使用方式 + 模拟实现Timer

文章目录 前言一、定时器1, 什么是定时器2, 如何使用定时器 二、模拟实现定时器1, 初步实现2, 问题改善 总结 前言 &#x1f4d5;各位读者好, 我是小陈, 这是我的个人主页 &#x1f4d7;小陈还在持续努力学习编程, 努力通过博客输出所学知识 &#x1f4d8;如果本篇对你有帮助, …

6.文本三剑客--sed、awk

文章目录 文本三剑客sed介绍命令介绍打印内容删除替换插入分组 文本三剑客 sed 介绍 sed编辑器 sed是一种流编辑器&#xff0c;流编辑器会在编辑器处理数据之前基于预先提供的一组规则来 编辑数据流。 sed编辑器可以根据命令来处理数据流中的数据&#xff0c;这些命令要么…

高阶python | 堆栈列表:RPN应用(模拟逆波兰式功能实现)

python版本&#xff1a;3.10 在列表中&#xff0c;append和pop方法有一个特殊的用途。可以在列表上使用这两个方法让列表变成一个堆栈使用。 这就是一个栈&#xff0c;它是先进后出&#xff0c;类似单门轿厢电梯一样的设计&#xff0c;出入口共用 堆栈最有用的应用之一就是做逆…

【社区团购】预制菜零售如何打造精准社群?

预制菜作为现代生活的新型“网红”食品&#xff0c;其受欢迎程度日益提高。而在商业竞争日益激烈的当下&#xff0c;如何让你的预制菜零售业务&#xff08;文章编辑ycy6221&#xff09;具有巨大的竞争优势呢&#xff1f;社区团购是一个不错的切入点&#xff0c;这不仅是为了扩大…

5月12号软件资讯更新合集.....

Vue 3.3 “浪客剑心” 发布 Vue 3.3 已正式发布&#xff0c;代号 "Rurouni Kenshin"&#xff08;浪客剑心&#xff09;。 公告写道&#xff0c;此版本专注于改进开发者使用体验 —— 特别是 SFC<script setup> 与 TypeScript 的结合使用。一同发布的还有 Vue…

【C语言】操作符详解(上)

操作符详解&#xff08;上&#xff09; 1.操作符分类2.算数操作符3.移位操作符3.1 右移3.2 左移 4.位操作符4.1位操作符发的应用 5.赋值操作符6.单目操作符7.关系操作符8.逻辑操作符 1.操作符分类 算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操…

Vue3-黑马(四)

目录&#xff1a; &#xff08;1&#xff09;vue3-基础-axios-获取数据 &#xff08;2&#xff09;vue3-基础-axios-发送数据 &#xff08;3&#xff09;vue3-基础-axios-baseURL &#xff08;1&#xff09;vue3-基础-axios-获取数据 第三方库axios是对xhr的封装&#xff0…

智安网络|网络安全威胁风险分析:识别以及预防黑客和钓鱼攻击

随着网络技术的不断发展和普及&#xff0c;网络安全问题日益严峻。黑客、病毒、恶意软件、钓鱼攻击等威胁不断涌现&#xff0c;给个人、企业、国家的信息安全带来了极大的威胁。如何识别、分析和预防网络安全威胁已成为所有人必须要解决的问题。本篇文章将从黑客攻击和钓鱼攻击…

proc文件系统

proc介绍 (1)proc是虚拟文件系统&#xff0c;虚拟的意思就是proc文件系统里的文件不对应硬盘上任何文件&#xff0c;我们用去查看proc目录下的文件大小都是零,是接受到请求才动态生成的&#xff1b; (2)proc文件系统是开放给上层了解内核运行状态的窗口&#xff0c;通过读取pro…

如何通过品牌矩阵号赋能品牌?

小红书作为年轻人的“消费决策”平台、逐步成为越来越多用户的消费指南&#xff0c;同时也变成众多品牌的营销基地。在小红书运营矩阵账号可以很好的树立品牌形象、增加粉丝粘性、节约广告成本&#xff0c;那么在搭建矩阵的过程中如何管理品牌矩阵号也成为众多品牌必须要思考的…

3.操作系统

文章目录 1.操作系统概述&#xff08;1&#xff09;当前操作系统的主要类型&#xff08;2&#xff09;操作系统的特点&#xff08;3&#xff09;五种主要的功能&#xff08;4&#xff09;考点分布 2.进程&#xff08;1&#xff09;进程的状态&#xff08;2&#xff09;进程的定…

jeecg低代码主从表打印

1.在在线开发菜单栏中选择online表单开发&#xff0c;新建两张表&#xff0c;分别为主表和附表。 2.首页进入报表设计——积木报表设计。 3.进入报表管理——打印设计&#xff0c;选择一个模板或者新建都可以。 4.进入设计页面&#xff0c;点击数据集管理右边的添加数据表&a…

高通开发系列 - 驱动模块Oops后如何找到出错位置

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 问题概述问题现象出错定位问题概述 加载驱动模块时发生:Kernel panic - not syncing: Fatal exception 那么如何找到驱动模块出错的…

抖音AI绘画变成真人软件

抖音AI绘画成人软件的发展可能包括以下几个方面&#xff1a; 算法优化&#xff1a;随着深度学习算法的不断发展&#xff0c;未来该技术可能会通过改进模型架构、优化训练方式等手段&#xff0c;提高生成图像的质量和自然度。 多样化的绘画风格&#xff1a;为了满足用户…

【软考备战·希赛网每日一练】2023年5月12日

文章目录 一、今日成绩二、错题总结第一题第二题第三题第四题 三、知识查缺 题目及解析来源&#xff1a;2023年05月12日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析&#xff1a; 一般情况下&#xff0c;一旦Web服务器向浏览器发送了请求数据&#xff0c;它就要…