剑指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 题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输 ...
随机推荐
- mysql的慢查询实战+sql优化
背景:使用A电脑安装mysql,B电脑通过xshell方式连接,数据内容我都已经创建好,现在我已正常的进入到mysql中 步骤1:设置慢查询日志的超时时间,先查看日志存放路径查询慢日志的地址,因为有慢 ...
- Kruskal算法求最小生成树(POJ2485)
题目链接:http://poj.org/problem?id=2485 #include <iostream> #include <stdio.h> #include < ...
- 怎样在 Ubuntu Linux 上安装 MySQL
本教程教你如何在基于 Ubuntu 的 Linux 发行版上安装 MySQL.对于首次使用的用户,你将会学习到如何验证你的安装和第一次怎样去连接 MySQL. -- Sergiu MySQL 是一个典 ...
- python模块之正则
re模块 可以读懂你写的正则表达式 根据你写的表达式去执行任务 用re去操作正则 正则表达式 使用一些规则来检测一些字符串是否符合个人要求,从一段字符串中找到符合要求的内容.在线测试网站:http:/ ...
- 第33题:LeetCode255 Verify Preorder Sequence in Binary Search Tree 验证先序遍历是否符合二叉搜索树
题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 考点 1.BST 二叉搜索树 2.递归 思路 1.后序 ...
- C/C++程序基础 (十)模板和泛型
什么是泛型编程 基于模板,有效将算法和数据结构分离. 模板 包括类型和参数 模板函数:抽象的函数定义,代表一类同构函数.编译器在其调用位置自动完成对应模板函数的实例化. 模板类:抽象的类定义,代表更高 ...
- 自定义扩展Compare比较方法
public static int Compare<T, V>(this T x, T y, Func<T, V> func) { return Comparer<V&g ...
- Centos7上docker的安装和基本使用
Centos7上Docker的相关操作 Docker的安装 1.检查内核版本 docker使用linux的内核必须是3.10以上,首先需要 # uname -r 2.使用yum安装docker # y ...
- Javascript简单特效及摘要
1.js中的Element对象 ** var input1=docuemnt.getElementById("input1"); //alert(input1.value); // ...
- python获取Excel数据
Python中一般使用xlrd(excel read)来读取Excel文件,使用xlwt(excel write)来生成Excel文件(可以控制Excel中单元格的格式),需要注意的是,用xlrd读取 ...