剑指Offer16.数值的整数次方 C++

1、题目描述

实现 pow(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

2、VS2019上运行

使用方法一:快速幂+递归;本质是分冶算法

#include <iostream>class Solution {
public:/*** @brief 计算 x 的 N 次方* @param x 底数* @param N 幂* @return x 的 N 次方结果*/double quickMul(double x, long long N) {// 递归终止条件: 当指数 N 为 0 时,底数的 0 次方结果为 1if (N == 0) {return 1.0;}// 递归计算底数 x 的 N/2 次方的结果double y = quickMul(x, N / 2);// 根据指数 N 的奇偶性来计算最终结果if (N % 2 == 0) {// 如果 N 为偶数,则底数的 N 次方等于底数的 N/2 次方乘以底数的 N/2 次方return y * y;}else {// 如果 N 为奇数,则底数的 N 次方等于底数的 N/2 次方乘以底数的 N/2 次方再乘以底数本身return y * y * x;}}/*** @brief 计算 x 的 n 次方* @param x 底数* @param n 幂* @return x 的 n 次方结果*/double myPow(double x, int n) {//将整数 n 转换为 long long 类型,以避免在取负数时产生溢出long long N = n;//分为N大于0和N小于0return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N); //x 的负指数等于 1 除以 x 的正指数}
};
int main() {Solution solution;double x = 2.0;int n = 10;double result = solution.myPow(x, n);std::cout << x << " 的 " << n << " 次方结果为:" << result << std::endl;return 0;
}

运行结果:
2 的 10 次方结果为:1024

3、解题思路

  • 1.首先,判断递归终止条件:当指数 N 为 0 时,底数的 0 次方结果为 1。如果 N 等于 0,则直接返回 1.0。
  • 2.当 N 不为 0 时,递归计算底数 x 的 N/2 次方的结果,即调用 quickMul(x, N / 2)。这里使用整数除法是为了保证能够递归到终止条件,当 N 奇数时能正确计算 N - 1 的结果。
  • 3.得到底数 x 的 N/2 次方的结果为 y。
  • 4.根据指数 N 的奇偶性来计算最终结果:
    如果 N 为偶数,底数的 N 次方等于底数的 N/2 次方乘以底数的 N/2 次方,即返回 y * y。
    如果 N 为奇数,底数的 N 次方等于底数的 N/2 次方乘以底数的 N/2 次方再乘以底数本身,即返回 y * y * x。
  • 通过递归的方式,不断将指数 N 减半,直到 N 为 0,然后再将结果往上层递归返回,最终得到底数 x 的 N 次方的结果。

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

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

相关文章

前端面试的性能优化部分(13)每天10个小知识点

目录 系列文章目录前端面试的性能优化部分&#xff08;1&#xff09;每天10个小知识点前端面试的性能优化部分&#xff08;2&#xff09;每天10个小知识点前端面试的性能优化部分&#xff08;3&#xff09;每天10个小知识点前端面试的性能优化部分&#xff08;4&#xff09;每天…

在线转换器有哪些优势?在线Word转PDF操作分享

我们如果想要将两者不同格式文件进行格式转换&#xff0c;就需要下载安装转换器。如果出门带的设备没有安装转换软件客户端&#xff0c;就无法使用&#xff0c;会比较麻烦。现在有了在线转换工具&#xff0c;只需要打开相应的网页就可使用&#xff0c;那么在线Word转PDF的操作是…

【实战】十一、看板页面及任务组页面开发(三) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十五)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…

4.9 C++ Boost 命令行解析库

命令行解析库是一种用于简化处理命令行参数的工具&#xff0c;它可以帮助开发者更方便地解析命令行参数并提供适当的帮助信息。C语言中&#xff0c;常用的命令行解析库有许多&#xff0c;通过本文的学习&#xff0c;读者可以了解不同的命令行解析库和它们在C项目中的应用&#…

antd5源码调试环境启动(MacOS)

将源码下载至本地 这里antd5 版本是5.8.3 $ git clone gitgithub.com:ant-design/ant-design.git $ cd ant-design $ npm install $ npm start前提&#xff1a;安装python3、node版本18.14.0(这是本人当前下载的版本&#xff09; python3安装教程可参考&#xff1a;https://…

Stable Diffusion入门修炼手册

简介 作为新入门的新手&#xff0c;通常安装完Stable Diffusion之后&#xff0c;一打开界面&#xff0c;在文生图输入girl或者dog&#xff0c;结果出来的画面比较糟糕&#xff0c;看起来像素很低&#xff0c;画面不清晰&#xff0c;人物也不怎么美&#xff0c;等等其他问题&am…

电脑运行缓慢?4个方法,加速电脑运行!

“我电脑才用了没多久哎&#xff01;怎么突然就变得运行很缓慢了呢&#xff1f;有什么方法可以加速电脑运行速度吗&#xff1f;真的很需要&#xff0c;看看我吧&#xff01;” 电脑的运行速度快会让用户在使用电脑时感觉愉悦&#xff0c;而电脑运行缓慢可能会影响我们的工作效率…

【vue】更改角色权限后,实现页面不刷新更改其可展示的导航菜单

登入的角色本身属于领导级别&#xff08;集团权限&#xff09;&#xff0c;没有下级的不同权限&#xff1a; 切换不同身份&#xff08;公司&#xff09;&#xff0c;以获得相应部门的不同导航菜单及权限 这里实现&#xff1a;更改角色权限后&#xff0c;实现页面 不刷新 更改…

攻防世界-supersqli

原题 解题思路 直接查找看不到明显的回显变化 先找回显变化数量 -1 order by 2 #如果是3列就报错&#xff0c;说明只有两列。接下来找数据库名称&#xff1a; -1 union select 1,databases # 结果是后端做了一些简单的过滤&#xff0c;需要更换查找语句。 -1; show …

LeetCode669. 修剪二叉搜索树

669. 修剪二叉搜索树 文章目录 [669. 修剪二叉搜索树](https://leetcode.cn/problems/trim-a-binary-search-tree/)一、题目二、题解方法一&#xff1a;递归法方法二&#xff1a;迭代法 一、题目 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 hig…

ReenTrantLock可重入锁(和synchronized的区别)总结

可重入性&#xff1a; 从名字上理解&#xff0c;ReenTrantLock的字面意思就是再进入的锁&#xff0c;其实synchronized关键字所使用的锁也是可重入的&#xff0c;两者关于这个的区别不大。两者都是同一个线程没进入一次&#xff0c;锁的计数器都自增1&#xff0c;所以要等到锁…

七夕节日表白:七大网页风格与其适用人群

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

如何使用 ChatGPT 将文本转换为 PowerPoint 演示文稿

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可二次编辑的3D应用场景 步骤 1&#xff1a;将文本转换为幻灯片演示文稿 第一步涉及指示 ChatGPT 根据给定的文本生成具有特定数量幻灯片的演示文稿。首先&#xff0c;您必须向 ChatGPT 提供要转换的文本。 使用以下提示指示…

SpringMVC-2-Spring MVC拦截器详解:从入门到精通

SpringMVC-2-Spring MVC拦截器详解&#xff1a;从入门到精通 今日目标 能够编写拦截器并配置拦截器 1.拦截器【理解】 1 拦截器介绍 1.1 拦截器概念和作用 拦截器&#xff08;Interceptor&#xff09;是一种动态拦截方法调用的机制&#xff0c;在SpringMVC中动态拦截控制器方…

C的进阶C++学习方向

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;软件配置等领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff01;送给自己和读者的…

L1-028 判断素数 测试点全过

题目 本题的目标很简单&#xff0c;就是判断一个给定的正整数是否素数。 输入格式 输入在第一行给出一个正整数N &#xff08; ≤ 10 &#xff09; &#xff08;≤ 10&#xff09; &#xff08;≤10&#xff09;&#xff0c;随后N行&#xff0c;每行给出一个小于 2 3 1 2^ 31…

Python开发环境(Visual Studio Code、Anaconda、PyInstaller、Enigma Virtual Box)

Python开发环境 [Anaconda、PyInstaller、Enigma Virtual Box] AnacondaAnaconda安装搭建Python环境Anaconda命令 Visual Studio CodeVisual Studio Code中Python设置Visual Studio Code中安装PyQt5Visual Studio Code中使用Qt DesignerVisual Studio Code中Anaconda切换虚拟环…

uniapp 自定义手机顶部状态栏(适配状态栏高度)

开启页面自定义导航栏功能 uniapp 在 pages.json 页面设置了全局的 globalStyle 的 "navigationStyle": "custom" 或单页面的 style 的 "navigationStyle": "custom" 之后页面顶部就没有自带的导航栏了&#xff0c;这时用户可自定义该…

介绍一些编程语言— Perl 语言

介绍一些编程语言— Perl 语言 Perl 语言 简介 Perl 是一种动态解释型的脚本语言。 最初的设计者为拉里・沃尔&#xff0c;它于 1987 1987 1987 年 12 12 12 月 18 18 18 日发表。Perl 借取了 C、sed、awk、shell scripting 以及很多其他编程语言的特性。其中最重要的特性…

仓库管理的重点在哪?仓库管理能有哪些软件?

对于做实体生意的中小商户来说&#xff0c;仓库管理工作是重中之重的&#xff0c;仓库管理的好坏&#xff0c;直接影响着门店销售和财务状况。 但对于很多中小商户来说&#xff0c;没有足够的人力和精力去高效地做好仓库管理工作&#xff0c;而借助仓库管理软件或进销存软件来…