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

【剑指offer-C++】JZ16:数值的整数次方

【剑指offer】JZ16:数值的整数次方

    • 题目描述
    • 解题思路

题目描述

描述:实现函数 double Power(double base, int exponent),求base的exponent次方。

注意:
1.保证base和exponent不同时为0。
2.不得使用库函数,同时不需要考虑大数问题。
3.有特殊判题,不用考虑小数点后面0的位数。

数据范围: ∣base∣≤100 , ∣exponent∣≤100 ,保证最终结果一定满足 ∣val∣≤104

进阶:空间复杂度 O(1) ,时间复杂度 O(n) 。

输入:2.00000,3
返回值:8.00000
输入:2.10000,3
返回值:9.26100
输入:2.00000,-2
返回值:0.25000
说明:2的-2次方等于1/4=0.25

解题思路

数值的整数次方:最直观的想法是,求a的b次方,使用for循环直接循环b次。更快求数值的整数次方的方法是快速幂,其基本思想是:如果b是偶数,那么ab就分为ab/2×ab/2;如果b是奇数,那么ab就分为ab-1×a。举一个通俗易懂的例子,比如求55,则55=54×5,54=52×52,52=51×51。如果使用计算机来实现的话,可以使用二进制来判断,当指数大于0时进入循环,首先判断指数的最后一位是否为1,如果是则将其乘入结果,同时每次循环中还需要对底数进行自乘并将指数右移一位,为下次循环做准备。

double Power(double base, int exponent) 
{double result=1;bool flag=exponent>0?true:false;exponent=abs(exponent);while(exponent>0){if(exponent&1) //二进制最后一位是1result*=base;base*=base;exponent>>=1;}return flag==true?result:1.0/result;;
}
http://www.lryc.cn/news/17061.html

相关文章:

  • 了解Axios及其运用方式
  • 【LeetCode】剑指 Offer(7)
  • Python:try except 异常处理整理
  • Redis Lua脚本的详细介绍以及使用入门
  • synchronized和ReentrantLock有什么区别呢?
  • SVHN数据集下载及使用方法
  • 产业安全公开课:2023年DDoS攻击趋势研判与企业防护新思路
  • Docker 容器命令 和安装各种镜像环境
  • 【数据结构】顺序表的深度剖析
  • 当面试官问“你的SQL能力怎么样”时,怎么回答才不会掉进应聘陷阱?
  • AI作画—中国画之山水画
  • Java:Java与Python — 编码大战
  • 山东专精特新各地市扶持政策
  • 持续事务管理过程中的事件驱动
  • 【手把手一起学习】(三) Altium Designer 20 原理图库添加元件
  • 设计模式-行为型模式:观察者模式
  • Springboot 为了偷懒,我封装了一个自适配的数据单位转换工具类
  • 正则表达式
  • java进阶Map 集合
  • Java 方法超详细整理,适合新手入门
  • 软考学习笔记(题目知识记录)
  • 2021.3.3idea创建Maven项目
  • ASP.NET MVC | 创建应用程序
  • 思科设备命令讲解(超基础)
  • Qt-FFmpeg开发-保存视频流裸流(11)
  • Zebec官方辟谣“我们与Protradex没有任何关系”
  • BMS电池管理系统中的各种算法介绍
  • stack Overflow 的使用
  • Vue 在for循环中动态添加类名及style样式集合
  • Maven的优势