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

剑指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.lqws.cn/news/90595.html

相关文章:

  • Elasticsearch | 如何将修改已有的索引字段类型并迁移数据
  • 云原生周刊:探索 Gateway API v1.3.0
  • 点击启动「高效模式」:大腾智能 CAD 重构研发设计生产力
  • Go 为何天生适合云原生?
  • 项目前置知识——不定参以及设计模式
  • MYSQL索引详解
  • 平台化 LIMS 系统架构 跨行业协同与资源共享的实现路径
  • Ubuntu 22.04 安装 Nacos 记录
  • ubuntu 20.04挂载固态硬盘
  • Ubuntu22.04安装MinkowskiEngine
  • 安装和配置 Nginx 和 Mysql —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录6
  • 解决 Ubuntu 20.04 虚拟机中 catkin_make 编译卡死问题
  • seafile:ubuntu搭建社区版seafile12.0
  • Starrocks Full GC日志分析
  • Stone 3D新版本发布,添加玩家控制和生物模拟等组件,增强路径编辑功能,优化材质编辑
  • 无人机避障——感知部分(Ubuntu 20.04 复现Vins Fusion跑数据集)胎教级教程
  • 网络安全厂商F5推出AI Gateway,化解大模型应用风险
  • RequestRateLimiterGatewayFilterFactory
  • 大数据 ETL 工具 Sqoop 深度解析与实战指南
  • 深入解析 Flask 命令行工具与 flask run命令的使用
  • 生产环境中安装和配置 Nginx 以部署 Flask 应用的详细指南
  • LeetCode - 144. 二叉树的前序遍历
  • 电工基础【5】简单的电路设计接线实操
  • python直方图
  • 转战web3远程工作的英语学习的路线规划
  • 安全-JAVA开发-第一天
  • 数据可视化有哪些步骤?2025高效落地指南
  • 5分钟申请edu邮箱【方案本周有效】
  • 业务材料——半导体行业MES系统核心功能工业协议AI赋能
  • 深入解析C++引用:从别名机制到函数特性实践