当前位置: 首页 > article >正文

剑指offer15_数值的整数次方

数值的整数次方


实现函数 double Power(double base, int exponent)

题目要求

计算 base exponent \text{base}^{\text{exponent}} baseexponent

  • 不得使用库函数
  • 不需要考虑大数问题,绝对误差不超过 10 − 2 10^{-2} 102
  • 不会出现底数和指数同为 0 的情况
  • 当底数为 0 时,指数一定为正
  • 底数绝对值不超过 10,指数范围 [ − 2 31 , 2 31 − 1 ] [-2^{31}, 2^{31}-1] [231,2311]
样例1
输入:10 ,2输出:100
样例2
输入:10 ,-2  输出:0.01

算法思路
  1. 处理指数为 0 的情况:直接返回 1.0。
  2. 处理负指数
    • 将负指数转换为正数处理
    • 使用 long long 存储指数,避免 INT_MIN 取绝对值时溢出
    • 最终结果取倒数
  3. 快速幂算法
    • 初始化结果 res = 1.0
    • 循环处理指数(二进制分解):
      • 若当前二进制位为 1,则乘上当前底数
      • 底数平方,指数右移一位
    • 若底数变为 0,提前终止循环(避免后续无效计算)
  4. 处理负指数结果:返回 1.0/res
时间复杂度
  • O(log⁡n):每次迭代将指数减半
关键点
  • 负指数处理:转换为正数计算后取倒数
  • 大指数处理:使用 long long 避免溢出
  • 浮点精度:当底数平方下溢为 0 时提前终止
  • 边界情况:底数为 0 时直接返回 0(指数为正)
C++ 实现
class Solution {
public:double Power(double x, int n) {typedef long long ll;double res = 1;bool im = n < 0;for(ll k = abs(ll(n)); k; k >>= 1){if(k & 1) res *= x;x *= x;}if(im) res = 1 / res;return res;}
};
http://www.lryc.cn/news/2398677.html

相关文章:

  • Centos7搭建zabbix6.0
  • 使用Redis的四个常见问题及其解决方案
  • Docker 部署前后端分离项目
  • 云游戏混合架构
  • 【小红书】API接口,获取笔记核心数据
  • 会议室钥匙总丢失?换预约功能的智能门锁更安全
  • Redis底层数据结构之跳表(SkipList)
  • 跨架构镜像打包问题及解决方案
  • 云原生时代 Kafka 深度实践:05性能调优与场景实战
  • Ubuntu安装Docker命令清单(以20.04为例)
  • 使用 Python 制作 GIF 动图,并打包为 EXE 可执行程序
  • HarmonyOS Next 弹窗系列教程(2)
  • Ubuntu 18.04 上源码安装 protobuf 3.7.0
  • 中小企业搭建网站选择虚拟主机还是云服务器?华为云有话说
  • 使用 HTML + JavaScript 在高德地图上实现物流轨迹跟踪系统
  • 19-项目部署(Linux)
  • html基础01:前端基础知识学习
  • Golang学习之旅
  • 【RoadRunner】自动驾驶模拟3D场景构建 | 软件简介与视角控制
  • 基于RK3576+FPGA芯片构建的CODESYS软PLC Linux实时系统方案,支持6T AI算力
  • 鸿蒙OSUniApp复杂表单与动态验证实践:打造高效的移动端表单解决方案#三方框架 #Uniapp
  • 在linux系统上搭建git服务器(ssh协议)
  • 适配器模式:让不兼容接口协同工作
  • NodeJS全栈开发面试题讲解——P12高性能场景题
  • DDP与FSDP:分布式训练技术全解析
  • 【Spring AI 1.0.0】Spring AI 1.0.0框架快速入门(1)——Chat Client API
  • 【笔记】在 MSYS2(MINGW64)中正确安装 Rust
  • 从汇编的角度揭秘C++引用,豁然开朗
  • 设计模式系列(07):建造者模式(Builder)
  • Maven 项目中集成数据库文档生成工具