LeetCode. Pow(x, n)
2016-01-31 11:42
330 查看
这题的难度是easy,主要考虑到3点即可:
当n是0的时候,结果为1;
当n是正数时;
当n是负数时,可以把x变成1/x;
下面是非递归的解法,代码如下:
当n是0的时候,结果为1;
当n是正数时;
当n是负数时,可以把x变成1/x;
下面是非递归的解法,代码如下:
class Solution { public: double myPow(double x, int n) { double base = n > 0 ? x : 1 / x; double result = 1; while(n != 0) { if(n % 2 != 0) { result *= base; } base *= base; n /= 2; } return result; } };递归的解法如下,利用右移运算符代替除2运算,同时关键的一点是,右移运算需要先把n取绝对值,同时n的范围为-2147483648~2147483647 ,比正数大1,需要处理。
if(n < 0 ) return (Pow(base,-(n+1))*base);这样就可以保证不会出现边界错误,完整代码如下:
class Solution {
public:
double Pow(double x, int n) {
double result;
if(n == 0)
return 1;
if(n == 1)
return x;
result = Pow(x,n>>1);
result *= result;
if(n & 1 == 1) //为奇数的话
result *= x;
return result;
}
double myPow(double x,int n)
{
double result = 1;
if(n == 0)
return 1;
double base = n > 0 ? x: 1/x;
if(n < 0 ) return (Pow(base,-(n+1))*base);
return Pow(base,n);
}
};
相关文章推荐
- Spark RDD 行动
- Spring4配置文件模板
- Linux下的IPC-UNIX Domain Socket 2013-08-30 11:01:02
- Javaweb学习之struts2标签库的使用
- JavaScript基本语句
- 【转载】应聘总经理的答卷,供大家打分
- USACO-Section 3.1 Agri-Net(最小生成树[Prim])
- 2016蓝桥杯假期任务之《复数运算》
- Java Collecttions - LinkedList 源码分析
- JQuery中的AJAX
- bzoj 1188 [HNOI2007]分裂游戏(SG函数,博弈)
- Linux中使用touch命令来修改文件的时间
- 杭电 hdu 5616 Jam's balance【思维】【暴力枚举】
- CssSpritesGenerator使用
- 书,是个好东西
- 名硕选择ATEN矩阵式多人管理KVM方案引起机房管理"化繁为简" 革命
- 大视野1047 [HAOI2007]理想的正方形
- Remote Desktop Connection Manager介绍
- 微积分知识补充——兼怀102
- Erlang cowboy 处理不规范的client