【Pow(x,n)】

题目:

Implement pow(xn).

代码:

class Solution {
public:
        double myPow(double x, int n)
        {
            double ret = Solution::positivePow(fabs(x), abs(n));
            if ( n>0 )
            {
                if ( x<0 && n&1 )
                {
                    return -1 * ret;
                }
            }
            else
            {
                if ( x<0 && abs(n)&1 )
                {
                    return -1 / ret;
                }
                return 1 / ret;
            }
            return ret;
        }
        static double positivePow(double x, int n)
        {
            if ( n==0 ) return 1;
            if ( n==1 ) return x;
            double v1 = Solution::positivePow(x, n/2);
            double v2 = n&1 ? x : 1;
            return v1 * v1 * v2;
        }
};

tips:

1. 考察binary search的思想,把计算复杂度由O(n)降低为O(logn)

2. 有个细节就是判断奇数偶数的时候,用bit判断,效率能略高一些。其实自己对计算机内部怎么执行加减乘除的原理应该是学过,但是忘记了,回头复习下。

时间: 2024-11-26 19:51:16

【Pow(x,n)】的相关文章

【Leetcode长征系列】Pow(x, n)

原题: Implement pow(x, n). 思路:递归计算pow. class Solution { public: double pow(double x, int n) { long long int mid = n/2; int d = n%2; if(n==0) return 1; if(n==1) return x; if(d==1) return pow(x, (n/2)+1) * pow(x, n/2); else return pow(x, n/2) * pow(x, n/

【Unity Shader编程】之十四 边缘发光Shader(Rim Shader)的两种实现形态

本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/51764028 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 本文工程使用的Unity3D版本: 5.2.1  这篇文章主要讲解了如何在Unity3D中分别使用Surface Shader和Vertex & Fragment Shader来编写边缘发光Shader. 一.最终实现的效果

【IScroll深入学习】解决IScroll疑难杂症

前言 在去年,我们对IScroll的源码进行了学习,并且分离出了一段代码自己使用,在使用学习过程中发现几个致命问题: ① 光标移位 ② 文本框找不到(先让文本框获取焦点,再滑动一下,输入文字便可重现) ③ 偶尔导致头部消失,头部可不是fixed哦   由于以上问题,加之去年我们团队的工作量极大,和中间一些组织架构调整,这个事情一直被放到了今天,心里一直对此耿耿于怀,因为IScroll让人忘不了的好处 小钗坚信,IScroll可以带来前端体验上的革命,因为他可以解决以下问题 区域滑动顺滑感的体验

【IScroll深入学习】突破移动端黑暗的利器

前言 在去年,我们对IScroll的源码进行了学习,并且分离出了一段代码自己使用,在使用学习过程中发现几个致命问题: ① 光标移位 ② 文本框找不到(先让文本框获取焦点,再滑动一下,输入文字便可重现) ③ 偶尔导致头部消失,头部可不是fixed哦   由于以上问题,加之去年我们团队的工作量极大,和中间一些组织架构调整,这个事情一直被放到了今天,心里一直对此耿耿于怀,因为IScroll让人忘不了的好处 小钗坚信,IScroll可以带来前端体验上的革命,因为他可以解决以下问题 区域滑动顺滑感的体验

GTY&#39;s birthday gift【矩阵快速幂】

题目大意:GTY的朋友ZZF的生日要来了,GTY问他的基友送什么礼物比较好,他的一个基友说送一个可重集吧!于是GTY找到了一个可重集S,GTY能使用神犇魔法k次,每次可以向可重集中加入一个数 a+b ,现在GTY想最大化可重集的和,这个工作就交给你了. 注:可重集是指可以包含多个相同元素的集合 思路:这题 呵呵呵,太伤心 不想写思路 #include<iostream>#include<cstdio>#include <math.h>#include<algori

【矩阵快速幂】数列

[NOIP模拟赛]数列 [题目描述] a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 求a 数列的第n 项对1000000007(10^9+7)取余的值. [输入格式] 第一行一个整数T,表示询问个数. 以下T 行,每行一个正整数n. [输出格式] 每行输出一个非负整数表示答案. [样例输入]36810 [样例输出]4919 [数据范围] 对于30%的数据 n<=100: 对于60%的数据 n<=2*10^7: 对于100%的数据 T<=100,

【百度地图API】建立全国银行位置查询系统(二)——怎样为地图添加控件

原文:[百度地图API]建立全国银行位置查询系统(二)--怎样为地图添加控件 <摘要>你将在第二章中学会以下知识: 使用手写代码的利器——notepad++: 如何为地图添加控件——鱼骨.鹰眼.比例尺.2D3D转换控件.版权控件. ----------------------------------------------------------------------------------------------------------------- 一.安装配置notepad++ 为什么

【黑马程序员】————预处理指令1-宏定义

预处理指令简介 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 2.为了区分预处理指令和一般的C语句,所有预处理指令都以符号"#"开头,并且结尾不用分号 3.预处理指令可以出现在程序的任何位置,它的作用范围是从它出现的位置到文件尾.习惯上我们尽可能将预处理指令写在源程序开头,这种情况下,它的作用范围就是整个源程序文件 4.C语言提供的预处理指令主要有:宏

【python数据挖掘课程】十四.Scipy调用curve_fit实现曲线拟合

前面系列文章讲过各种知识,包括绘制曲线.散点图.幂分布等,而如何在在散点图一堆点中拟合一条直线,也变得非常重要.这篇文章主要讲述调用Scipy扩展包的curve_fit函数实现曲线拟合,同时计算出拟合的函数.参数等.希望文章对你有所帮助,如果文章中存在错误或不足之处,还请海涵~ 前文推荐:       [Python数据挖掘课程]一.安装Python及爬虫入门介绍       [Python数据挖掘课程]二.Kmeans聚类数据分析及Anaconda介绍       [Python数据挖掘课程]