`
xitonga
  • 浏览: 585385 次
文章分类
社区版块
存档分类
最新评论

数值整数次方

 
阅读更多
/********************************************
题目:实现函数double Power(double base, int exponent)
求base的exponent次方。不得使用库函数,同时不需要考虑
大数问题。
********************************************/


#include<iostream>

bool equal(double num1, double num2);
double powerWithUnsignedExponent(double base, unsigned int absExponent);
double Power(double base, int exponent)
{
	if(equal(base,0) && exponent <=0)	//考虑无效输入
		throw new std::exception("Invalid input!");

	unsigned int absExponent = exponent;
	if(exponent < 0)					//考虑指数为负数的情况
		absExponent = unsigned int(-exponent);
	
	double result = powerWithUnsignedExponent(base,absExponent);
	
	if(exponent<0)						//得到指数为负数的结果
		return 1.0/result;

	return result;
}
/*时间复杂度为O(N)
double powerWithUnsignedExponent(double base, unsigned int absExponent)
{
	double result = 1.0;
	for(int i=1; i<=absExponent; i++)	//实现base^absExponent
		result *= base;
	return result;
}
*/
//判断两个double是否相等
bool equal(double num1, double num2)	
{
	if((num1-num2>0.0000001)
		&& (num1-num2<0.0000001))
		return true;
	else
		return false;
}


//上面注释的powerWithUnsignedExponent()方法虽然能满足功能,
//但是不够高效时间复杂度为O(n)
//以下方法利用
//a^n = a^(n/2) * a^(n/2);当n为偶数
//a^n = a^((n-1)/2) * a^((n-1)/2) * a;当n为奇数
//其时间复杂度为O(NlogN)
double powerWithUnsignedExponent(double base, unsigned int absExponent)
{
	if(absExponent == 0)
		return 0;
	if(absExponent == 1)
		return base;
	double result = powerWithUnsignedExponent(base,absExponent >> 1);//右移代替除以2
	result *= result;
	if(absExponent & 0X01 == 1)		//判断absExponent是不是奇数
		result *= base;
	return result;
}

int main()
{
	double result1 = Power(2,4);	//基数和指数都为正式
	double result2 = Power(2,0);	//指数为0
	double result3 = Power(-2,1);	//指数为1
	double result4 = Power(-3,-2);	//指数为负数

	std::cout << result1 <<std::endl;//结果输出
	std::cout << result2 <<std::endl;
	std::cout << result3 <<std::endl;
	std::cout << result4 <<std::endl;
	return 0;	
}
//由于计算机表示的小数(float和double)都有误差,我们不能直接用等号(==)
//判断两个小数是否相等。如果两个小数的差的绝对值很小,比如小于0,.0000001
//就可以认为他们相等。
//用位运算替换乘除法,效率高很多

==参考剑指offer

分享到:
评论

相关推荐

    数值的整数次方.md

    数值的整数次方.md

    java基础面试题数值的整数次方

    java基础面试题数值的整数次方本资源系百度网盘分享地址

    js代码-200615-数值的整数次方

    js代码-200615-数值的整数次方

    数值的整数次方1

    示例 1:输入: 2.00000, 10 输出: 1024.00000示例 2:输入: 2.10000, 3 输出: 9.26100// 当 x 是 0 而 n

    bbkgl#notes#数值的整数次方1

    下面说下思路:如果a&gt;=0:边界条件:a^0 = 1, a^1 = a;如果a边界条件:a^0 = 1, a^-1 =1 / a;代码如下:double

    剑指Offer(Python多种思路实现):数值的整数次方

    剑指Offer(Python多种思路实现):数值的整数次方 面试16题: 题目:数值的整数次方 题:实现函数double Power(double base, int exponent),求base的exponent次方、不得使用库函数,同时不需要考虑大数问题。 解题...

    yzytmac#Notes#面试题11:数值的整数次方1

    当指数为负数的时候,可以先对指数求绝对值,然后算出次方的结果之后再取倒数,当底数(base)是零且指数是负数的时候,如果不做特殊处理,就会出现对0求倒数从而导致

    trollyxia#CodingInterviews#012-数值的整数次方1

    保证base和exponent不同时为0思路要注意特殊情况:指数为0的情况,不管底数是多少都应该是1指数为负数的情况,求出的应该是其倒数幂的倒数指数为负数的情况

    wangrui996#leedcode#0016.数值的整数次方1

    2.经过上面的转换问题就变成了两个子问题,我们用循环解决: 1.如果x == 0 && n 3.初始化结果res = 1

    Python《剑指offer》算法实现-数值的整数次方

    # Python实现《剑指offer》 部分代码自己添加了一些测试用例, 或者自己添加了一些功能 1. 初级程序员注重算法和数据结构 2. 事先做好准备,对工作有热情 3. 面试过程放松。不要急于写代码,了解清楚所要解决的问题,...

    hairrrrr#1200_Problems#40_数值的整数次方1

    示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000

    floatLig#CSLearning#面试题16.数值的整数次方1

    示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000

    面试题16:数值的整数次方

    一、虽然计算能够显示正确结果,但是对无效输入(即基数为0且指数为负)不能够很好的标明出来,即可能会忽略isInvaildInput的一个表达 #include class c_Pow { bool isInvalidInput; double result;...

    剑指offer 题16——数值的整数次方

    数值的整数次方 题目: 实现函数double Power(double base,int exponent), 求base得exponent次方。不得使用库函数,同时不需要考虑大数问题 因为不需要考虑大数问题,所以看起来似乎很简单,只需要累加就好 double ...

    16:数值的整数次方(剑指offer第2版Python)

    给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 2、代码详解 先说结论: 特例:底数为0且指数为负,抛异常“0不能求倒数” equal_zero时,因为计算机内表示小数有误差,要写成abs...

    大整数乘法分治算法(10的256次方乘以10的256次方)

    大整数在密码学、生物信息、基因工程等多个 领域都有重要的应用价值。大整数无法在程序设 计语言能直接表示的整数范围内...计算结果中所有数位上的精确数值,并提高计算 的效率,必须选择合适的数据结构和有效的算法。

    为面试做准备的python经典编程题之1

    数组中重复的数字.py 二维数组中的查找.py 替换空格.py 从尾到头打印链表.py 重建二叉树.py 二叉树的下一个节点.py 用两个栈实现队列.py ...数值的整数次方.py 打印从1到最大的n位数.py 删除链表的节点.py

    目前最火最热门的python经典编程题之1

    3.数组中重复的数字 Array 常考 4.二维数组中的查找 Array 常考 5.替换空格 String 6.从尾到头打印链表 Linked List ...16.数值的整数次方 Math, 关注 17.打印从1到最大的n位数 18.O(1)时间删除链表节点 Linked List

    ACCESS基本函数大全

    access基本函数介绍。 类型 函数名 函数格式 说明 算 术 函 数 绝对值 Abs(&lt;数值... 自然指数 Exp(&lt;数值表达式&gt;) 计算e的N次方,返回一个双精度 自然对数 Log(&lt;数值表达式&gt;) 计算以e为底的数值表达式的值的对数

Global site tag (gtag.js) - Google Analytics