数值的整数次方(剑指offer面试题11)
实现函数 double Power(double base, int exponent),即乘方运算。
考虑问题
- exponet < 0 , 可以转化为 1.0 / Power(base, -1 *exponent)——负数与正数同时处理
- exponet < 0,并且base=0时,此时应该报错,因为此时0作为除数
- Power(0, 0) = 1
- Power(*, 0) = 1
思路一:常规思路
#include <iostream>
using namespace std; bool InvalidInput = false; bool equal(double val1, double val2)
{
if((val1 - val2 < 0.0000001) && (val1 - val2 > -0.0000001))
return true;
else
return false;
} double Power(double val, int exponent)
{
InvalidInput = false;
if(equal(val, 0.0) && exponent < )
{
InvalidInput = true;
return 0.0;
}
int absExponent = (unsigned int)(exponent);
double rev = 1.0;
if(exponent < )
absExponent = (unsigned int)(-exponent);
for(int i = ; i < absExponent; ++i)
rev *= val;
if(exponent < )
return 1.0 / rev;
else
return rev;
} int main()
{
cout << Power(3.3, ) << endl;
cout << Power(3.3, -) << endl;
}
注意问题
- 计算机表示小数都有误差,所以直接用比较(==)会出现错误,解决的方法是两个数做差,与很小的数比较。
- 当base=0 && exponet < 0时,此时输入错误,用InvalidInput作为输出表示
思路二:递归
Pow (2, 4) = (Pow(2, 4), 2),这样做会节省时间
#include <iostream>
using namespace std; bool InvalidInput = false; bool equal(double val1, double val2)
{
if((val1 - val2 < 0.0000001) && (val1 - val2 > -0.0000001))
return true;
else
return false;
} double Power(double base, int exponent)
{
if(exponent == )
return ;
else if(exponent == )
return base;
else if(exponent < )
{
if(equal(base, ))
{
InvalidInput = true;
exponent = ;
return 0.0;
}
return 1.0 / Power(base, - * exponent);
}
else
{
double rev = Power(base, exponent >> );
if(exponent & == )
{
double rev = Power(base, exponent >> );
return rev * rev;
}
else
return Power(base, exponent - ) * base;
}
} int main()
{
cout << Power(3.3, ) << endl;
cout << Power(3.3, -) << endl;
cout << Power(3.3, -) << endl;
cout << Power(, -) << endl;
cout << "InvalidInput:" << InvalidInput << endl;
cout << Power(, -) << endl;
cout << "InvalidInput:" << InvalidInput << endl;
}
结果

注意问题
- 判断奇数偶数,可以用val & 1,位操作比除法快
- 同理,处以2,可以用val / 2 代替
数值的整数次方(剑指offer面试题11)的更多相关文章
- 9、数值的整数次方------------>剑指offer系列
数值的整数次方 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 思路 这道题逻辑上很简单,但很容易出错 关键是要考虑全面,考虑到所有情况 ...
- 剑指Offer面试题11(Java版):数值的整数次方
题目:实现函数double Power(double base,int exponent),求base的exponent次方.不得使用库函数,同一时候不须要考虑大数问题 1.自以为非常easy的解法: ...
- 剑指Offer:面试题11——数值的整数次方(java实现)
题目描述: 实现函数double Power(double base, int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数问题 思路:本题的重点考察内容是 ...
- 剑指offer——面试题11:旋转数组的最小数字
#include"iostream" using namespace std; int GetMinNumber(int *data,int len) { ,right=len-, ...
- 剑指offer——面试题11:快速排序
#include"iostream" #include"random" using namespace std; /* void Swap(int &a ...
- C++版 - 剑指offer 面试题24:二叉搜索树BST的后序遍历序列(的判断) 题解
剑指offer 面试题24:二叉搜索树的后序遍历序列(的判断) 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true.否则返回false.假设输入的数组的任意两个 ...
- 剑指Offer——笔试题+知识点总结
剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...
- C++版 - 剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题,ZOJ 1088:System Overload类似)题解
剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题) 原书题目:0, 1, - , n-1 这n个数字排成一个圈圈,从数字0开始每次从圆圏里删除第m个数字.求出这个圈圈里剩下的最后一个数字 ...
- C++版 - 剑指offer 面试题22:栈的压入、弹出序列 题解
剑指offer 面试题22:栈的压入.弹出序列 提交网址: http://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106?tpId ...
随机推荐
- 开发中可能会用到的几个 jQuery 小提示和技巧(转)
今天,我们将分享一些很有用的技巧和窍门给 jQuery 开发人员.jQuery 是最好的 JavaScript 库之一,用于简化动画,事件处理,支持 Ajax 和 HTML 的客户端脚本.网络中有大量 ...
- xml基础学习笔记05
Xpath快速解析 如题一样,本篇主要说说Xpath快速查找XML文档 * Xpatn.Xquery,是专门用来查询xml的语言 * 查询xml非常快 Xpatn.Xquery,是专门用来 ...
- Careercup - Microsoft面试题 - 6337018766295040
2014-05-10 06:38 题目链接 原题: What do you think is the next big thing in technology? For example, search ...
- windows下配置nodejs+npm
windows下安装nodejs是比较方便的 (v0.6.0之后,支持windows native),进入官网http://nodejs.org/ 点击install即可安装.下载完成后一路next ...
- 《Soft Skill》一书中的好句子
The biggest mistake that you can make is to believe that you are working for somebody else. Job secu ...
- 使用SecureRandom类替代Random类
java.util.Random 产生确定的值可能被恶意的程序预测到. java.security.SecureRandom 产生不确定的随机数不能被预测到. 所以优先使用java.security. ...
- Leetcode#87 Scramble String
原题地址 两个字符串满足什么条件才称得上是scramble的呢? 如果s1和s2的长度等于1,显然只有s1=s2时才是scramble关系. 如果s1和s2的长度大于1,那么就对s1和s2进行分割,划 ...
- 第k短路
poj 2449 模板题 A*+spfa #include<iostream> #include<cstdio> #include<cstring> #inclu ...
- Linux --windows vs
我其实并不是很清楚我在做什么....希望做完之后可以解答....... 在看了一堆GNU, Clang, GCC, QT, MinGW, CygWin, POSIX 这些概念之后,我觉得我在做的事情就 ...
- MYSQL导入导出.sql文件(转)
一.MYSQL的命令行模式的设置: 桌面->我的电脑->属性->环境变量->新建-> PATH=“:path\mysql\bin;”其中path为MYSQL的安装路径. ...