博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试题11 数值的整数次方
阅读量:2401 次
发布时间:2019-05-10

本文共 3841 字,大约阅读时间需要 12 分钟。

地址:http://ac.jobdu.com/problem.php?pid=1514

题目1514:数值的整数次方

题目描述:

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

输入:

输入可能包含多个测试样例。

对于每个输入文件,第一行输入一个整数T,表示测试案例的数目,接下来的T行每行输入一个浮点数base和一个整数exponent,两个数中间用一个空格隔开。

输出:

对应每个测试案例,

输出一个浮点数代表答案,保留两位小数即可。

样例输入:
51.0 100.0 -51.0 01.2 52.0 -1
样例输出:
1.00e+00fINF1.00e+00f2.49e+00f5.00e-01f
提示:

 请特别注意不同的编译器对于科学计数法格式输出中指数位数的差别。建议使用九度Online Judge所使用的编译环境。

考察点:

1、基底为0,指数为负数

2、需要对基底和指数(>0,<0,=0)分类计算

3、输出格式%.2ef,基底——小数点后保留两位的科学计数法,数字末尾添加“ f ”

方法一:

#include 
#include
#include
bool equal(double num1, double num2) { if ((num1 - num2 < 0.00000001) && (num1 - num2 > -0.00000001)) return true; else return false;}int main(){ int t; while(scanf("%d", &t) != EOF) { while(t --) { double base = 0.0; int exponent = 0; scanf("%lf %d", &base, &exponent); if(exponent == 0) { double multiply = 1.0; printf("%.2ef\n", multiply); continue; } else if(exponent < 0) { if(equal(base, 0.0)) { printf("INF\n"); continue; } else { double multiply = 1.0; for(int i = 0; i < abs(exponent); i ++) multiply *= base; printf("%.2ef\n", 1 / multiply); } } else if(exponent > 0) { if(equal(base, 0.0)) { double multiply = 0.0; printf("%.2ef\n", multiply); continue; } else { double multiply = 1.0; for(int i = 0; i < abs(exponent); i ++) multiply *= base; printf("%.2ef\n", multiply); } } } } return 0;}/************************************************************** Problem: 1514 Language: C++ Result: Accepted Time:80 ms Memory:1020 kb****************************************************************/

方法二:递归

2的32次方 = 2的16次方 * 2的16次方

2的16次方 = 2的8次方 * 2的(16  / 2)次方

2的5次方 = 2的平方 * 2的平方 * 2的1次方

#include 
//浮点数比较大小bool equal(double num1, double num2) { if((num1 - num2) > -0.00000001 && (num1 - num2) < 0.00000001) return true; else return false;} double recursion(double base, int exponent) { if(exponent == 0) return 1; else if(exponent == 1) return base; double result = recursion(base, exponent >> 1);//右移一位相当于除以2 result *= result; if (exponent & 0x1 == 1)//判断exponent奇偶性 result *= base; return result;}int main(){ int n; while(scanf("%d", &n) != EOF){ double base; int exponent; while(n --) { scanf("%lf %d", &base, &exponent); if(exponent == 0) { printf("%.2ef\n", 1.0); continue; } else if(exponent < 0) { if(equal(base, 0.0)) { printf("INF\n"); continue; } double result = 1 / recursion(base, -exponent); printf("%.2ef\n", result); } else if(exponent > 0) { if(equal(base, 0.0)) { printf("%.2ef\n", 0.0); continue; } double result = recursion(base, exponent); printf("%.2ef\n", result); } } } return 0;}/************************************************************** Problem: 1514 Language: C++ Result: Accepted Time:80 ms Memory:1020 kb****************************************************************/

算法参考:http://blog.csdn.net/sunnyyoona/article/details/14646053
你可能感兴趣的文章
什么是XAMPP (zt)
查看>>
使用 Linux 操作系统: Dell PowerVault RD1000 附录
查看>>
tmpwatch命令详解
查看>>
XAMPP安装(zt)
查看>>
如何在 Windows XP 上安装 WordPress 本地测试
查看>>
用 Logwatch 工具监控 Linux 系统 Log 日志(zt)
查看>>
优酷看钢铁侠
查看>>
docker学习1:CentOS Docker 安装
查看>>
docker学习3:Docker Hello World
查看>>
docker学习7:Docker 安装 PHP
查看>>
docker学习3:Docker容器使用
查看>>
将ESXI上的虚拟机导出为OVF模板
查看>>
ftp: connect: 没有到主机的路由
查看>>
ovftool导出虚拟机报错处理过程!
查看>>
教你巧妙获取文件的名称属性(转)
查看>>
为保障网络安全加一道防火墙(转)
查看>>
数字证书,企业必备的“身份证”(转)
查看>>
安全业务:向网络核心靠拢(转)
查看>>
网络安全方面的专业词汇(转)
查看>>
特洛伊木马大揭密(转)
查看>>