剑指Offer - 九度1514 - 数值的整数次方
剑指Offer - 九度1514 - 数值的整数次方
2013-11-30 00:49
- 题目描述:
-
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
- 输入:
-
输入可能包含多个测试样例。
对于每个输入文件,第一行输入一个整数T,表示测试案例的数目,接下来的T行每行输入一个浮点数base和一个整数exponent,两个数中间用一个空格隔开。
- 输出:
-
对应每个测试案例,
输出一个浮点数代表答案,保留两位小数即可。
- 样例输入:
-
5
1.0 10
0.0 -5
1.0 0
1.2 5
2.0 -1
- 样例输出:
-
1.00e+00f
INF
1.00e+00f
2.49e+00f
5.00e-01f
题意分析:
coding面试题考察的不仅仅是算法数据结构,还注重考验面试者的仔细程度。因此有些人碰见一些看起来没什么算法难点的题就觉得很简单,比如“判断三条边能否构成三角形”之类的“简单题”。
这一题也是这样,求一个浮点数的整数次方。我们定义底数为double x,指数为int n。对于求结果的算法,我们可以用for循环在O(n)的时间得出结果;也可以用快速幂的思想,二分用O(log(n))的时间求解。毫无疑问我们应该选择后者(如果你要从数值的角度深究误差传递的问题,就可能没那么简单了(O_o)zzZ)。
算法想完了,接着就开始写吧。三两句写完后,开始yy测试用例,主要是各种边界值:
x的情况:
正数:正常case
负数:(-x)^n = (-1)^n * x^n
0:0的负数次方无意义,因为除0会造成浮点错误SIGFPE。
n的情况
正数:正常case
负数:x^(-n) = 1 / x^n
0:非零数的零次方都是1,0的0次方右极限为1,值不存在(我描点绘图验证过,但数学不好,不会证..见笑)。
所有组合情况都考虑到,然后将处理特殊case的代码加上,就能够通过检验了。
// 651842 zhuli19901106 1514 Accepted 点击此处查看所有case的执行结果 1020KB 795B 80MS
//
#include <cstdio>
using namespace std; double myexp(double x, int n)
{
if(n == ){
return ;
}else if(n < ){
return myexp(1.0 / x, -n);
}else{
if(x < ){
return (n % ? - : ) * myexp(-x, n);
}
double res = myexp(x, n / );
if(n % ){
return res * res * x;
}else{
return res * res;
}
}
} int main()
{
int t, ti;
double x, res;
int n; while(scanf("%d", &t) == ){
for(ti = ; ti < t; ++ti){
scanf("%lf%d", &x, &n);
if(x == 0.0){
if(n >= ){
printf("%.2ef\n", 0.0);
}else{
printf("INF\n");
}
}else{
res = myexp(x, n);
printf("%.2ef\n", res);
}
}
} return ;
}
剑指Offer - 九度1514 - 数值的整数次方的更多相关文章
- 剑指Offer:面试题11——数值的整数次方(java实现)
题目描述: 实现函数double Power(double base, int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数问题 思路:本题的重点考察内容是 ...
- 剑指offer(12)数值的整数次方
题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 题目分析 这道题用传统的方法也可以做,只不过效率太低,这里我们用到快速幂的方法 ...
- 剑指offer十二之数值的整数次方
一.题目 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 二.思路 1.传统方法计算,时间复杂度O(n) 2.递归方式计算,时间复杂度O ...
- 【剑指Offer】12、数值的整数次方
题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 解题思路: 本题看似比较简单,是一个简单的指数运算,但需要完 ...
- 剑指Offer - 九度1520 - 树的子结构
剑指Offer - 九度1520 - 树的子结构2013-11-30 22:17 题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每 ...
- 剑指Offer - 九度1524 - 复杂链表的复制
剑指Offer - 九度1524 - 复杂链表的复制2014-02-07 01:30 题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点 ...
- 剑指Offer - 九度1509 - 树中两个结点的最低公共祖先
剑指Offer - 九度1509 - 树中两个结点的最低公共祖先2014-02-07 01:04 题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样 ...
- 剑指Offer - 九度1508 - 把字符串转换成整数
剑指Offer - 九度1508 - 把字符串转换成整数2014-02-06 23:46 题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入: 输入可能包含多个测试样例 ...
- 剑指Offer - 九度1504 - 把数组排成最小的数
剑指Offer - 九度1504 - 把数组排成最小的数2014-02-06 00:19 题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输 ...
随机推荐
- python数组列表、字典、拷贝、字符串
python中字符串方法 name = "I teased at life as if it were a foolish game" print(name.capitalize( ...
- 用yum rpm 快速安装zabbix agent
用yum 快速安装zabbix agent. wget http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-agent-3.4.2-1.el7 ...
- UESTC 1246 拆x3
用归纳法分析可以知道死循环只有4. 分析一下复杂度,如果n很大并且不是素数,根据基本不等式可以知道 sum factor(n) ≥ 2+n/2 ≍ n/2. 复杂度是O(T*logN*sqrt(N)) ...
- 居中未知元素(翻译https://css-tricks.com/centering-in-the-unknown/)
在web开发中,当你遇到居中元素时,知道越多关于元素本身和父级元素的信息,居中做起来就很轻松.但是,当遇到你一点都不知道的元素该怎么办? It's still kinda doable. 不会很难:已 ...
- java.util包中 Set 和 List 的区别
http://ligaosong.iteye.com/blog/903692 对于Set 和 List都是 接口 Collection 的子接口 1.Set 不允许重复,List允许重复 2.Set ...
- BZOJ1004: [HNOI2008]Cards(Burnside引理 背包dp)
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4255 Solved: 2582[Submit][Status][Discuss] Descript ...
- 【杂题总汇】UVa-1336 Fixing the Great Wall
[UVA-1336]Fixing the Great Wall 一开始把题看错了……直接用的整数存储答案:之后用double存最后输出答案的时候取整就AC了
- thymeleaf单选回显,多选回显,选回显,下拉默认选中第一个
//默认选中第一个<input type ="radio" name="repaymentType" th:each ="repaymentTy ...
- centos 7忘记了root密码,如何改密码?
今天服务器突然进不去了,不知道是密码被改了,还是什么情况! 服务器版本:centos 7.0 网上查找了很多文档,有些办法不可行,如果是亲自试过绝对可行的方法: 1:重启服务器,如下界面,按键盘 &q ...
- centos下LVM配置与管理
centos下LVM配置与管理 LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层, ...