首页IT科技整数的次数是多少(每日算法之数值的整数次方)

整数的次数是多少(每日算法之数值的整数次方)

时间2025-09-19 10:46:52分类IT科技浏览5814
导读:JZ16 数值的整数次方 描述 实现函数...

JZ16 数值的整数次方

描述

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

方法1

思路

既然是求次方        ,那我们做不断累乘就可以了                       ,重点是处理负的次方数 具体做法: step 1:先处理次方数为负数的情况                ,将底数化为分数解决               。 step 2:遍历次方数的次数        ,不断累乘底数                        。

代码

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; }

方法2

思路

计算幂运算                       ,我们还可以使用快速幂快速计算        。 如果我们要计算5^10                ,常规的算法是55=25,然后再255=125                       ,如此往下                       ,一共是9次运算,即n−1次       。 但是我们可以考虑这样:55=25(二次)               、2525=625(四次)                        、625625=...(八次)                ,这是一个二分的思维                       ,运算次数缩减到了log2n次 具体做法: step 1:先处理次方数为负数的情况        ,将底数化为分数解决                        。 step 2:使用快速幂计算次方:将已乘出来的部分求次方                ,可以每次缩小一半要求的次方数                。

代码

package mid.JZ16数值的整数次方; 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; }*/ public double Power(double base, int exponent) { if (exponent < 0) { base = 1 / base; exponent = -exponent; } return Pow(base, exponent); } public double Pow(double base, int exponent) { double res = 1.0; while (exponent != 0) { if ((exponent & 1) != 0) { res *= base; } base *= base; exponent = exponent >> 1; } return res; } public static void main(String[] args) { new Solution().Power(5, 10); } }

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
实现聊天机器人的主流方法(火爆全网的人工智能聊天机器人使用教程)