转载请注明出处: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
****************************************************************/
【剑指offer】数值的整数次方,布布扣,bubuko.com
原文地址:http://blog.csdn.net/ns_code/article/details/25506085