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

直接用一个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. 第一次QQ群视频教育有感

    标题:第一次QQ群视频教育有感 作者:丁又专, 时间:2014.08.16     教育的目的:启示学生心智,发现个人优势,激发探索欲望.     今天早上看到 中国大学MOOC<文献管理与信息 ...

  2. K60 启动过程分析

    很高兴老师借给我一K60的开发板,趁着暑假好好鼓捣鼓捣! 有了上图的过程分析我想心里大概有个低了吧! 以下看代码: /* CodeWarrior ARM Runtime Support Library ...

  3. Duanxx的STM32学习:STM32F103中等容量的功能和外设

    版权声明:本文博客原创文章,博客,未经同意,不得转载.

  4. fastjson经常用法

    首先,JSON究竟是什么? JSON就是一串字符串 仅仅只是元素会使用特定的符号标注. {} 双括号表示对象 [] 中括号表示数组 "" 双引號内是属性或值 : 冒号表示后者是前者 ...

  5. 采用Flume实时采集和处理数据

    它已成功安装Flume在...的基础上.本文将总结使用Flume实时采集和处理数据,详细过程,如下面: 第一步,在$FLUME_HOME/conf文件夹下,编写Flume的配置文件,命名为flume_ ...

  6. Android读取JSON格式数据

    Android读取JSON格式数据 1. 何为JSON? JSON,全称为JavaScript Object Notation,意为JavaScript对象表示法. JSON 是轻量级的文本数据交换格 ...

  7. CODE - TSQL convert Query to JSON

    原文 ODE - TSQL convert Query to JSON TSQL - Query to JSON It is my philosophy that good development s ...

  8. TortoiseGit客户端密钥配置

    为了方便在windows下使用TortoiseGit客户端提交代码,提高开发效率,现对SSH key的配置进行一下说明,亲测可用. 1.安装TortoiseGit,找到开始菜单里TortoiseGit ...

  9. cxSpreadBook 要么 cxSpreadSheet 设置文本格式

    uses cxSSStyles,cxSSDesigner; Type TStyleAccess = class(TcxSSCellStyle);   TSheetAccess = class(TcxS ...

  10. sql server 汉字的长度

    前几天改了人家程序中的一个小bug,就是输入时长度的校验问题.项目是.Net的,数据库是 sql server的.检查了一下,发现以前的人员把长度给控制小了,数据库中允许输入256的长度,而别人在as ...