问题描述

实现 pow(x, n) ,即计算 x 的 n 次幂函数。
示例 1:

输入: 2.00000, 10
输出: 1024.00000

示例 2:

输入: 2.10000, 3
输出: 9.26100

示例 3:

输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25

说明:
-100.0 < x < 100.0
n 是 32 位有符号整数,其数值范围是 [−2^31, 2 ^31 − 1] 。

解题思路

求x的n次方,显然,利用for循环,每次让x相乘即可,但是本题有很多细节,如n为负时计算可以先求为取相反数后计算得到的倒数,但是当n=−2^31,直接取相反数会导致溢出,当n为负时,本题如果直接让x循环n次的话会造成超时,所以每次循环都可以判断结果是否趋近于0,如果趋近于0,就可以返回0。同时还有许多其它的情况也需要考虑到,具体见下面代码。

代码实现

class Solution {public double myPow(double x, int n) {//当x为1的时候(注意,浮点数不能直接等于),不管多少次放,都返回1if((x>0.9999999)&(x<1.0000001)){return x;}//当x为-1的时候if((x>-1.000001)&&(x<-0.999999)){if(n%2==0){return (-x);}else{return x;}}double result=x;       //任何数的0次方都为1if(n==0){return 1;}else if(n<0){//当n为-2的31次方if(n==-2147483648){//需要相乘2147483648次for(int i=0;i<=2147483647;i++){result=result*result;double temp=(double)(1/result);//当此时的乘积接近为0,就返回0if((temp<0.000001)&&(temp>0)){return 0.00000;}}}else{int m=-n;        //取相反数,然后相乘。for(int i=1;i<m;i++){result=result*x;double temp=(double)(1/result);if((temp<0.000001)&&(temp>0)){return 0.00000;}}}//最后取倒数result=(double)(1/result);}else{for(int i=1;i<n;i++){result=result*x;}}return result;}
}

leetcode题解50-Pow(x,n)相关推荐

  1. [Leetcode]50. Pow(x, n)

    Implement pow(x, n). 我的做法就比较傻了.排除了所有的特殊情况(而且double一般不可以直接判断==),然后常规情况用循环来做.- -||| 直接用循环,时间复杂度就比较大.应该 ...

  2. 【LeetCode】50. Pow(x, n) (3 solutions)

    Pow(x, n) Implement pow(x, n). 按照定义做的O(n)肯定是TLE的. 利用这个信息:x2n = (xn)2 有个注意点,当n为负是,直接取反是不可行的. 由于int的表示 ...

  3. 【分治】LeetCode 50. Pow(x, n)

    LeetCode 50. Pow(x, n) Solution1:我的答案 偷鸡摸狗的做法 class Solution { public:double myPow(double x, int n) ...

  4. LeetCode第50题思悟——Pow(x, n)(powx-n)

    LeetCode第50题思悟--Pow(x, n)(powx-n) 知识点预告 对边界值的处理意识: 对整数溢出的处理: 折半的思想 题目要求 实现 pow(x, n) ,即计算 x 的 n 次幂函数 ...

  5. c语言的 pow函数是快速幂吗,leetcode 50. Pow(x, n)(快速幂)

    就是一个二分法快速幂. 但是需要注意的问题是这里是实数,而且n可能为负. int的范围是-2,147,483,648 至 2,147,483,647.如果为-2,147,483,648那么直接n=-n ...

  6. Leetcode 50. Pow(x, n)

    50. Pow(x, n) Total Accepted: 96891 Total Submissions: 348858 Difficulty: Medium Implement pow(x, n) ...

  7. LeetCode题解目录

    最新更新于2020.11.27 前往LeetCode主页. 前往GitHub源码.(服务器原因,暂停同步.) 前往码云主页. 已解决 456/1878 - 简单353 中等 90 困难 13 2020 ...

  8. 32位有符号整数_008. 字符串转换整数 (atoi) | Leetcode题解

    点击上方"蓝色字体",选择"设为星标" 每天复习一道面试题,轻松拿大厂Offer~ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...

  9. [LeetCode 题解]: Roman to Interger

    前言 [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given a roman ...

  10. LeetCode题解:Add Two Numbers

    LeetCode题解 说明:本人不是什么算法高手,部分内容参考了Google.stackoverflow.segmentfault中得到的一些解答或者代码.之所以去做Leetcode上的题是因为毕业工 ...

最新文章

  1. 不明原因的约束报错的两种处理方式
  2. 第十五届全国大学生智能车东北赛区成绩
  3. NKStartup的参数KData
  4. 1.3.3 激活函数介绍
  5. CSS基础_Day04
  6. 【读书笔记】 网页关闭确认框
  7. CO1 Introduction
  8. es search delete
  9. git SourceTree 客户端 安装/使用教程
  10. 网页版扫雷 -- React练习
  11. 12日,7月,2012年 - GAE调试,Wordpress,晚睡晚起
  12. 大学英语(第四册)复习(原文及全文翻译)——Unit 5 - TO LIE OR NOT TOLIE—THE DOCTOR‘S DILEMMA(撒谎还是不撒谎——医生的难题)
  13. Linux服务器CPU性能模式
  14. gif图片裁切、压缩导出无水印图片(保姆级教程,亲测可用)
  15. R语言按照人口比例绘制甘肃地图
  16. 读《学会提问》有感(一)
  17. 运筹说 第57期 | 整数规划的分支定界法
  18. 1-Java的诞生和发展
  19. 曼尼托巴大学计算机科学世界排名,2020年曼尼托巴大学QS世界排名
  20. 区块链---双花问题

热门文章

  1. 标识符怎么读_音标怎么学?到底该学英式还是美式
  2. iptables学习笔记:端口转发命令优化
  3. oracle:oracle学习笔记(三)
  4. linux怎么使用git安装目录,Linux系统中怎么安装Git?
  5. 【FLink】四种图 以及 数据在 taskManager 之间的流转
  6. 【FLink】Flink checkpoint 实现数据连续计算 恢复机制 拓扑图 变化 如何处理
  7. 【ElasticSearch】Es 源码之 LifecycleComponent 源码解读
  8. 【Flink】Flink exitCode=239
  9. 95-50-060-java.nio.channels-NIO-NIO之Selector(选择器)
  10. 95-50-040-java.nio.channels-NIO-NIO之Buffer(缓冲区)