首页 > 代码库 > 【剑指offer】数值的整数次方
【剑指offer】数值的整数次方
转载请注明出处:http://blog.csdn.net/ns_code/article/details/25506085
剑指offer上的第十一题,九度OJ上测试通过。
- 题目描述:
给定一个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
- 提示:
请特别注意不同的编译器对于科学计数法格式输出中指数位数的差别。建议使用九度Online Judge所使用的编译环境。
AC代码如下:
#include<stdio.h> #include<math.h> #include<stdbool.h> bool flag = true; //求base的正数absExp次幂 double PowerAbs(double base,unsigned int absExp) { //递归退出的条件 if(absExp == 0) return 1.0; if(absExp == 1) return base; //递归求次方 double result = PowerAbs(base,absExp>>1); result *= result; //判断奇偶性 if(absExp&1 == 1) result *= base; return result; } //求base的exp次方 double Power(double base,int exp) { //底数为0,指数为负数的情况 if(fabs(base-0.0)<0.0000001 && exp<=0) { flag = false; return 0.0; } unsigned int absExp = (unsigned int)abs(exp); double result = PowerAbs(base,absExp); if(exp<0) result = 1.0/result; return result; } int main() { int n,exp; double base; while(scanf("%d",&n) != EOF) { int i; for(i=0;i<n;i++) { //每次都要先将flag置为true flag = true; scanf("%lf %d",&base,&exp); double result = Power(base,exp); if(flag) printf("%.2ef\n",result); else printf("INF\n"); } } return 0; }
/**************************************************************
Problem: 1514
User: mmc_maodun
Language: C
Result: Accepted
Time:80 ms
Memory:912 kb
****************************************************************/
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。