牛客题解 | 数值的整数次方

news/2025/2/28 14:27:44/文章来源:https://www.cnblogs.com/wc529065/p/18743175

题目

题目链接

题目的主要信息:
  • 求一个浮点数的整数次方
  • 整数有正有负
  • 不可以使用库函数,也不需要判断大数问题
举一反三:

学习完本题的思路你可以解决如下题目:

JZ83. 剪绳子(进阶版)

方法一:直接运算(推荐使用)

思路:

既然是求次方,那我们做不断累乘就可以了,重点是处理负的次方数,因为\(x^{-n}=(\frac{1}{x})^n\),因此我们将底数转换为相应分数,就可以将次方数变回正数。

if(exponent < 0){base = 1 / base;exponent = -exponent;
}

具体做法:

  • step 1:先处理次方数为负数的情况,将底数化为分数解决。
  • step 2:遍历次方数的次数,不断累乘底数。

Java实现代码:

public class Solution {public double Power(double base, int exponent) {//处理负数次方if(exponent < 0){base = 1 / base;exponent = -exponent;}double res = 1.0;//累乘for(int i = 0; i < exponent; i++)res *= base;return res;}
}

C++实现代码:

class Solution {
public:double Power(double base, int exponent) {//处理负数次方if(exponent < 0){base = 1 / base;exponent = -exponent;}double res = 1.0;//累乘for(int i = 0; i < exponent; i++)res *= base;return res;}
};

Python实现代码:

class Solution:def Power(self , base: float, exponent: int) -> float:#处理负数次方if exponent < 0:base = 1 / baseexponent = -exponentres = 1.0#累乘for i in range(exponent):res *= basereturn res

复杂度分析:

  • 时间复杂度:\(O(n)\),其中\(n\)为所求的次方数,一共需要乘\(n\)
  • 空间复杂度:\(O(1)\),常数级变量,无额外辅助空间
方法二:快速幂(扩展思路)

知识点:分治:

分治即“分而治之”,“分”指的是将一个大而复杂的问题划分成多个性质相同但是规模更小的子问题,子问题继续按照这样划分,直到问题可以被轻易解决;“治”指的是将子问题单独进行处理。经过分治后的子问题,需要将解进行合并才能得到原问题的解,因此整个分治过程经常用递归来实现。

思路:

计算幂运算,我们还可以使用快速幂快速计算。 如果我们要计算\(5^{10}\),常规的算法是\(5*5=25\),然后再\(25*5=125\),如此往下,一共是\(9\)次运算,即\(n-1\)次。但是我们可以考虑这样:\(5*5=25\)(二次)、\(25*25=625\)(四次)、\(625*625=...\)(八次),这是一个二分的思维,运算次数缩减到了\(log_2n\)次,公式如下:

alt

具体做法:

  • step 1:先处理次方数为负数的情况,将底数化为分数解决。
  • step 2:使用快速幂计算次方:将已乘出来的部分求次方,可以每次缩小一半要求的次方数。

图示:

alt

Java实现代码:

public class Solution {//快速幂private double Pow(double x, int y){ double res = 1;while(y != 0){//可以再往上乘一个if((y & 1) != 0) res *= x;//叠加x *= x; //减少乘次数y = y >> 1; }return res;}public double Power(double base, int exponent) {//处理负数次方if(exponent < 0){base = 1 / base;exponent = -exponent;}return Pow(base, exponent);}
}

C++实现代码:

class Solution {
public://快速幂double Pow(double x, int y){ double res = 1;while(y){//可以再往上乘一个if(y & 1) res *= x;//叠加x *= x; //减少乘次数y = y >> 1; }return res;}double Power(double base, int exponent) {//处理负数次方if(exponent < 0){base = 1 / base;exponent = -exponent;}return Pow(base, exponent);}
};

Python实现代码:

class Solution:#快速幂def Pow(self, x: float, y: int) -> float:res = 1while y:#可以再往上乘一个if y & 1: res *= x#叠加x *= x #减少乘次数y = y >> 1 return resdef Power(self , base: float, exponent: int) -> float:#处理负数次方if exponent < 0:base = 1 / baseexponent = -exponentres = 1.0return self.Pow(base, exponent)

复杂度分析:

  • 时间复杂度:\(O(log_2n)\),其中\(n\)为所求的次方数,快速幂相当于对求幂使用二分法
  • 空间复杂度:\(O(1)\),常数级变量,无额外辅助空间

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

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

相关文章

支付宝 IoT 设备入门宝典(下)设备经营篇

本篇会以支付宝 IoT 设备经营为中心,介绍常见的设备相关能力和问题解决方案,帮助商户利用设备进行运营动作,让设备更好的帮助自己上篇介绍了支付宝 IoT 设备管理,但除了这些基础功能外,商户还可以利用设备进行一些运营动作,让设备更好的帮助自己,本篇就会以设备经营为中…

国家能源集团某煤矿办公网与工业网整合运维

北京智和信通智和网管平台通过跨网络的整合监控运维能力,对某煤矿中的办公网和工业网进行管理。在一个平台内根据网络类型进行区分管理,统一监控。 国家能源集团某煤矿是国家能源集团在晋陕蒙区域的典型现代化井工煤矿,具有丰富的煤炭资源和先进的生产管理模式。 项目…

最长公共子序列LCS 笔记

最长公共子序列LCS 笔记 假设存在两个相同长度平凡的序列,我们希望找到它们最长的公共子序列,在没有其他特殊条件的情况下,利用动态规划计算的时间复杂度为 \(O(n^2)\) ,并且可以记录这个子序列 考虑两个指针作用于两个序列上,记 \(dp_{i,j}\) 表示为连续子序列 \([a_1,a_…

Windows 系统调用学习笔记

依然是 x86 的,照着 lzyddf 师傅的 blog 和 OneTrainee师傅的blog 学的 Windows API Application Programming Interface,简称 API 函数。Windows API 是微软为 Windows 操作系统提供的一组函数、数据结构、常量和协议,允许开发者与操作系统进行交互。通过 Windows API,开发…

作业一:自我介绍+软工五问

作业一这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineeringClassof2023这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineeringClassof2023/homework/13325这个作业的目标 学习使用github和博客园自我介绍、兴趣爱好 我叫梁鑫…

deepseek---官方API接入

最近deepseek又开放充值了,而且还大降价,果断接入: 1、首先就是去充值,然后获取key 2、打开接口文档-找到合适自己的语言接口 3、直接复制代码就能运行<?php$curl = curl_init();curl_setopt_array($curl, array(CURLOPT_URL => https://api.deepseek.com/chat/comp…

香港服务器选择指南:高防 vs 站群 vs GPU场景解析

一、引言 背景:香港作为亚太地区数据中心枢纽,凭借国际带宽、网络自由、法律完善等优势,成为企业全球化布局的首选节点。 目标:解析香港服务器在不同业务场景下的选择逻辑,帮助企业根据需求匹配高防、站群或GPU服务器。 二、香港服务器的核心优势 | 网络自由性:| 国际带…

大模型常见文件格式safetensors vs. gguf

safetensorsHeader: 文件的元数据(大小、版本) Meta data: 列表,每个元素表示文件里存的张量的类型、形状、偏移量 Tensor data: 列表元素对应的张量数据ggufgguf不依赖外部的配置文件,它可以把配置文件、词表、tokenizer、template等存入gguf中(如果一个模型有多个gguf文…

2025年最值得入手的CRM系统!这5款真的好用不踩坑

挑CRM真让人头大!有的太复杂,上手难 有的功能太少,啥都干不了 有的收费离谱,小团队根本用不起别担心!今天就给大家盘点5款2025年最值得入手的CRM系统,每一款都是真实用户口碑不错的,不管你是创业小团队,还是大公司,这里面肯定有一款适合你。 ​​ 一、简道云CRM 如果你…

web开发 辅助学习管理系统开发日记 day4

/**法法法!!!忘记保存发布了,写了一天的草稿直接没了,我晕死,今天补档昨天的吧。 */今天开始开发员工管理模块了,也得知了3月14有校招的消息,看来要加快进度了(╯▔皿▔)╯ Q1:今天调了一个时间最长的bug,在写分页查询的时候我将三层架构全部写完之后,运行程序下面报…

Web前端入门第3问:前端需要学习哪些技术?

Web前端开发技术学习路径基础知识必备 HTML+CSS+JavaScript ,就目前来看,这三板斧是入门前端开发的门槛,无论如何都是逃不掉了。进阶知识必须会一门主流的前端框架,比如:React/Vue/Angular/Svelte,就国内的从业环境来看,Vue占有绝对优势,后续也会写一些 vue 相关的文章…

Web前端入门第1问:英语是否很重要?有哪些前置条件?

HELLO,这里是大熊学习前端开发的入门笔记。 本系列笔记基于 windows 系统。 在入门之前,是否有这样的疑问: 程序员的英语是否很牛?毕竟程序员的代码像天书一样,比如这样:答案是否定的。 英语并不是编程的前置条件,不要被看似天书的代码吓到,程序代码都存在一定的语法结…