题目:就是实现一个指数函数。

直接用一个while一直乘以n词肯定是会超时的。

自己写了用递归(而且是很挫的递归),测试了无数次,根据每个case去修改代码。终于可以AC了。不忍直视,自己写了好长,如下:

class Solution {
public:
double pow(double x, int n) {
int flag1 = , flag2 = ;
if (n < )
{
flag1 = ;
if (n > INT_MIN) n = -n;
else
{flag2 = ; n = -(n + );}
}
if (n == || x == )
return ;
if (x == )
return ;
int time = (int) (log(n)/log());
double ans = x;
int cnt = ;
while(time--)
{
cnt <<= ;
ans *= ans;
}
if(!flag2)
{
if (cnt == n)
{
if(flag1)
return /ans;
return ans;
}
else
{
if (flag1)
return /(ans*pow(x, n - cnt));
return ans*pow(x, n - cnt);
}
}
else
{
if (cnt == n)
{
if (flag1)
return /(ans*x);
return ans*x;
}
else
{
if (flag1)
return /(x*ans*pow(x, n-cnt));
return x*ans*pow(x, n - cnt);
}
}
}
};

然后肯定要看看其他大神。用递归的,别人十几行就搞定了。

double pow(double x, int n) {
if (n == ) return 1.0;
double half = pow(x, n/);
if (n% == )
{
return half*half;
}
else if (n>)
{
return half*half*x;
}
else
{
return half/x*half;
}
}

以下有一个没有用递归的。

public double pow(double x, int n) {
if(n==)
return 1.0;
double res = 1.0;
if(n<)
{
if(x>=1.0/Double.MAX_VALUE||x<=1.0/-Double.MAX_VALUE)
x = 1.0/x;
else
return Double.MAX_VALUE;
if(n==Integer.MIN_VALUE)
{
res *= x;
n++;
}
}
n = Math.abs(n);
boolean isNeg = false;
if(n%== && x<)
{
isNeg = true;
}
x = Math.abs(x);
while(n>)
{
if((n&) == )
{
if(res>Double.MAX_VALUE/x)
return Double.MAX_VALUE;
res *= x;
}
x *= x;
n = n>>;
}
return isNeg?-res:res;
}

leetcod Pow(x, n)的更多相关文章

  1. 【探索】无形验证码 —— PoW 算力验证

    先来思考一个问题:如何写一个能消耗对方时间的程序? 消耗时间还不简单,休眠一下就可以了: Sleep(1000) 这确实消耗了时间,但并没有消耗 CPU.如果对方开了变速齿轮,这瞬间就能完成. 不过要 ...

  2. [LeetCode] Super Pow 超级次方

    Your task is to calculate ab mod 1337 where a is a positive integer and b is an extremely large posi ...

  3. [LeetCode] Pow(x, n) 求x的n次方

    Implement pow(x, n). 这道题让我们求x的n次方,如果我们只是简单的用个for循环让x乘以自己n次的话,未免也把LeetCode上的想的太简单了,一句话形容图样图森破啊.OJ因超时无 ...

  4. Javascript四舍五入(Math.round()与Math.pow())

    代码 Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ ...

  5. Pow(x, n)

    Implement pow(x, n). public class Solution { public double pow(double x, int n) { //判断x是不是0 if(Math. ...

  6. leetcode pow(x,n)实现

    题目描述: 自己实现pow(double x, int n)方法 实现思路: 考虑位运算.考虑n的二进制表示形式,以n=51(110011)为例,x^51 = x^1*x^2*x^16*x^32,因此 ...

  7. C语言pow函数编写

    C语言pow函数编写 #include<stdio.h> double chaoba(double f,double q); //声明自定义函数 void main(void) { dou ...

  8. C语言中关于POW在不同状态下四舍五入的解决方法

    这是今天作业中的一个代码: #include <stdio.h>#include<math.h>int main(){ printf("请输入一个整数:") ...

  9. Pow 算法

    #include <iostream> using namespace std; template<class T, class Int> T Pow(T x, Int n) ...

随机推荐

  1. debian 该分区的部分安装移动硬盘后无法识别。

    有一个新的团购1T移动硬盘.购买格化学式ntfs经过几次简单的子区域. 4G硬盘PE.100G高速互动,盈800许多G分为两个相等的存储盘. 到您的计算机USB接口后,, 桌面弹出自己主动4一封信. ...

  2. NSIS:应用软件自动升级功能的探索与实践

    原文 NSIS:应用软件自动升级功能的探索与实践 记得以前轻狂曾分享过使用第三方软件实现应用软件自动升级功能 (详细http://www.flighty.cn/html/soft/20110106_1 ...

  3. ImageView建立selector在录音中遇到的小问题及解决方案

    随着两张照片做了一个selector,采用ImageView的src要么background采用selector当点击,总不会出现点击效果,这就是为什么?经过一番折腾,后来发现"揭秘&quo ...

  4. about greenplum collection tool

    three collection tool for greenplum:pstack.strace.gcore.                                            ...

  5. 从源码看Android中sqlite是怎么读DB的(转)

    执行query 执行SQLiteDatabase类中query系列函数时,只会构造查询信息,不会执行查询. (query的源码追踪路径) 执行move(里面的fillwindow是真正打开文件句柄并分 ...

  6. ArrayList实现根据某属性大小相间排序

    Java本身提供了一个集合的帮助类java.util.Collections,提供了对集合操作一些方法,借助于此类提供的sort方法可以实现对List进行排序操作 import java.util.A ...

  7. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2 ...

  8. DynamicReports 导出Excel 例子

    import java.awt.Color; import java.io.FileOutputStream; import java.util.ArrayList; import java.util ...

  9. error:stray&#39;\243&#39;in program

    error:stray'\243'in program 问题:       C原因在编译时出现例如以下错误 error:stray'\243'in program 错误原因: 非 - 标准ascII字 ...

  10. 【Leetcode】Sort List (Sorting)

    这个问题需要与归并排序排两个名单,基本思路分为切割与合并 合并后的代码Merge Two Sorted List里已经讲得非常清楚了. 所以这里直接给出代码. public ListNode merg ...