标签:
给定一个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
3.递归解法较新颖。原理是:
实现:
/* 数值的整数次方 by Rowandjj 2014/7/26 */ #include<stdio.h> #include<math.h> bool g_invalid_input = false; //方案1 double PowerWithUnsignedExponent1(double base,unsigned int exponent) { double result = 1.0; unsigned int i; for(i = 0; i < exponent; i++) { result *= base; } return result; } //方案2---->递归 double PowerWithUnsignedExponent2(double base,unsigned int exponent) { if(exponent == 0) { return 1; } if(exponent == 1) { return base; } double result = PowerWithUnsignedExponent2(base,exponent>>1); result *= result; if(exponent & 0x1 == 1)//exponent%2==1,为奇数 { result *= base; } return result; } //base^exponent double Power(double base,int exponent) { g_invalid_input = false; //底数为0,指数为负数 if(fabs(base - 0.0)<0.0000001 && exponent < 0) { g_invalid_input = true; return 0.0; } unsigned int absExponent = (unsigned int)(exponent); if(exponent < 0) { absExponent = (unsigned int)(-exponent); } double result = PowerWithUnsignedExponent2(base,absExponent); if(exponent < 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++) { g_invalid_input = false; scanf("%lf %d",&base,&exp); double result = Power(base,exp); if(!g_invalid_input) printf("%.2ef\n",result); else printf("INF\n"); } } return 0; }
标签:
原文地址:http://blog.csdn.net/chdjj/article/details/38147341