计算一个数的 N 次方的多种解法
1. 问题
实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,x^n )。其中:
-100.0 < x < 100.0
-2^31 <= n <= 2 ^31-1
-10^4 <= x ^n <= 10 ^ 4
2. 思路
- 方法一
- 方法二
- 方法三
使用折半计算,每次把 n
缩小一半,这样 n
最终会缩小到 0,任何数的 0次方都为 1,这时候我们再往回乘,如果此时 n
是偶数,直接把上次递归得到的值算个平方返回即可,如果是奇数,则还需要乘上个 x
的值。
还有一点需要引起我们的注意的是 n
有可能为负数,对于 n
是负数的情况,我们可以先用其绝对值计算出一个结果再取其倒数即可。我们让 i
初始化为 n
,然后看 i
是否是 2 的倍数,是的话 x
乘以自己,否则 res
乘以 x
,i
每次循环缩小一半,直到为 0 停止循环。最后看 n
的正负,如果为负,返回其倒数。
3. 实现
3.1 方法一【遍历法】
class Solution {public:double myPow(double x, int n) {double f = 1.0;if (n == 0){return 1;}else if (n == 1){return x;}else{if (n > 0){for (int i = 1; i <= n; i++){f *= x;}}else{for (int i = 1; i <= abs(n); i++){f /= x;}}}return f;}
};
该方法在输入为 0.00001 和 2147483647 时会执行超时。
3.2 方法二
class Solution {public:double myPow(double x, int n) {double f = 1.0;if (n == 0){return 1;}else if (n == 1){return x;}else{if (n > 0){if (n % 2 == 1){return myPow(x, n / 2) * myPow(x, n / 2) * x;}else{return myPow(x, n / 2) * myPow(x, n / 2);}}else{if (n % 2 == 1){return 1.0 / (myPow(x, abs(n) / 2) * myPow(x, abs(n) / 2) * x);}else{return 1.0 / (myPow(x, abs(n) / 2) * myPow(x, abs(n) / 2));}}}}
};
3.3 方法三
class Solution {public double myPow(double x, int n) {double res = 1.0;for(int i = n; i != 0; i /= 2){if(i % 2 != 0){res *= x;}x *= x;}return n < 0 ? 1 / res : res;}
}
计算一个数的 N 次方的多种解法相关推荐
- c 语言一个数的n次方,C 语言实例 - 计算一个数的 n 次方
计算一个数的 n 次方,例如: 23,其中 2 为基数,3 为指数. #include int main() { int base, exponent; long long result = 1; p ...
- c 语言一个数的n次方,C 语言实例 – 计算一个数的 n 次方 - C 语言基础教程
C 语言实例 计算一个数的 n 次方,例如: 23,其中 2 为基数,3 为指数. 实例 – 使用 while #include int main() { int base, exponent; lo ...
- C 语言实例 - 计算一个数的 n 次方
C 语言实例 - 计算一个数的 n 次方计算一个数的 n 次方,例如: 23,其中 2 为基数,3 为指数.实例 - 使用 while #include <stdio.h>int main ...
- 新增Linux系统调用——计算一个数的三次方
新增Linux系统调用 起初看到这个实验,完全是一脸懵啊,后来再看,依旧是一脸懵啊,再后来,借鉴了网上大佬们的教程,以及一天的时间折腾,终于完成了该实验.只是可惜了自己的电脑,CPU以80℃的温度 ...
- python幂次方计算公式_【python】计算一个数得n次方?
题目:给定一个数d和n,如何计算d的n次方?例如:d = 2, n = 3, d的n次方为2**3 = 8 分析:递归得方法: (1)n = 0,那么计算结果肯定为1 (2)n = 1, 那么计算结果 ...
- C语言——pow函数的使用,计算一个数的n次方
文章目录 头文件引用 原型 如何实现用pow函数开n次方 头文件引用 include<math.h> 原型 double pow( double x, double y ): 如何实现用p ...
- c语言计算阶乘的倒数和,for循环计算某个数的阶乘、阶乘和及其倒数的阶乘和...
//4的阶乘 int jc = 4; //定义一个变量用来代表要计算的数值 long jd =1; //定义最终输出的阶乘 for(int i = 1; i <= jc;i++) //定义循环加 ...
- 每天一道LeetCode-----求一个数的n次方,n是很大很大的数,n用数组存储着
Pow(x, n) 原题链接Pow(x, n) 给定一个数,求n次方.n次方可以分解成两个n/2次方相乘,所以递归即可. class Solution { public:double myPow(do ...
- Java中一个数的N次方
在Java中一个数的N次方不可以写成:a^0这种形式,算得的数不正确: 正确的写法为Math.pow(a,0); 此外,Math中常用的函数有 /** *Math.sqrt()//计算平方根*Math ...
- python求所有参数的乘积_python 通过可变参数计算n个数的乘积方法
Python编写一个函数,分享1*2*3*4...*n的乘积,编写主这是一种代码: def jc(n): i=1 s=1 for i in range(1,n+1): s=s*i i+=1 retur ...
最新文章
- Asp.Net源码(转载)
- QTableview 获取鼠标坐标的item(QModelIndex)
- python end of statement_17个新手常见Python运行时错误
- 杭电1596find the safest road
- DoWhile(Java)
- error C2440: “<function-style-cast>”: 无法从“IplImage *”转换为“cv::Mat”
- lisp语言cond和if套用_AutoCAD LISP 循环选择语句cond
- IDEA集成MAVEN 报错
- 数字图像处理和计算机视觉课程大纲,数字图像处理B课程教学大纲.doc
- Linux网络编程 | UDP编程
- 2020手机的像素密度ppi排行_5g手机排行榜最新2020年11月5g手机性价比排行榜
- 办公人员必须会的15种求和技巧
- https://juejin.im/entry/58622ebc570c3500694ec86c
- 智能手环开发之 实现蓝牙(BLE)基本功能
- 通过机器学习预测电网平均总负荷
- 计算机中sqrt函数是什么意思,(excle sqrt)excel中的SQRT是什么意思?
- python中错误TypeError: __init__() got an unexpected keyword argument 'shape'
- 【C++程序设计教程(第三版)钱能】 学习笔记 上半部/C++过程化语言基础
- Ubuntu启用Cgroups V2
- 华为哪款手机将用鸿蒙系统,鸿蒙系统终于来了!这几款华为手机都可以升级了...