剑指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 题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输 ...
 
随机推荐
- ES6相关特性(解构赋值)
			
解构赋值:本质上是一种匹配模式,等号两边的模式相同,则左边的变量可以被赋予对应的值. 注意:null & undefined 不能解构赋值!!! 数组的解构赋值: let [a,[[b],c] ...
 - MyEclipse 相关配置操作、问题处理及快捷键说明
			
MyEclipse傻瓜式安装不做介绍,试用期结束后破解操作见博客:MyEclipse 2014 破解补丁及激活步骤 以下为安装完MyEclipse后一般需要进行的一些配置,写来自己参考用.比较简陋,望 ...
 - 显示、更改ubuntu linux主机名(计算机名)
			
在bash中输入hostname可以显示计算机名.Linux和windows都可以使用这条指令. 主机名保存在/etc/hostname文件中 需要进入Root权限才可以修改该文件. sudo ged ...
 - graphql 项目搭建(二)
			
一.Express基本框架 1.新建一个文件夹gql-server vscode 打开项目,在终端下输入yarn init -y 生成package.json 包(如果没安装yarn ,npm也一样, ...
 - 微信的 rpx
			
微信小程序新单位rpx与自适应布局 rpx是微信小程序新推出的一个单位,按官方的定义,rpx可以根据屏幕宽度进行自适应,在rpx出现之前,web页面的自适应布局已经有了多种解决方案,为什么微信还捣 ...
 - P1540 机器翻译
			
题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...
 - System.Web.Caching.Cache
			
此类是利用缓存来保存信息的.可以把一些稳定的数据,不会随用户而改变的信息利用Cache保存起来,可以优化网站的速度. Cache辅助类已上传:GitHub Cache和Session,cookie的区 ...
 - Python 初始—(列表)
			
列表切片 数组data=[a,b,c,d,e] print(data[1,3])#取出b,c , 如果用-号切片则是反向取数,那么去取出来的数为data[-3,-1],如果是0则默认不填 列表追加 d ...
 - lincode 680 Split String
			
Split String 描述 笔记 数据 评测 Give a string, you can choose to split the string after one character or ...
 - 使用Jmeter性能测试,读取csv文件时的乱码问题
			
读取csv参数乱码问题 发送请求时参数通过CSV文件读取,发送请求后显示错误,把获取的参数通过在线urlencode转码器转码后发现是乱码.打开csv设值,编码格式选择的是UTF-8,打开参数文件后发 ...