题目描述:
给定一个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
#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
int flag = 1;
//判断double类型数据是否相等
int equal(double n,double m){
if((n - m) > -0.0000001 && (n - m) < 0.0000001){
return 1;
}
else{
return 0;
}
}
double PowerOfPositive(double base,int exponent){
if(exponent == 0){
return 1;
}
else if(exponent == 1){
return base;
}
else{
//右移一位相等于除以2
double result = PowerOfPositive(base,exponent >> 1);
result *= result;
//判断奇偶性
if(exponent & 0x1 == 1){
result *= base;
}
return result;
}
}
double Power(double n,int exponent){
int i;
double result = 1.0;
//0^负数次方
if(equal(n,0.0) && exponent < 0){
flag = 0;
return 0.0;
}
else{
flag = 1;
int absExponent = exponent;
if(exponent < 0){
absExponent = - exponent;
}
result = PowerOfPositive(n,absExponent);
if(exponent < 0){
result = 1.0 / result;
}
return result;
}
}
int main()
{
int i,n,num,exponent;
double base;
while(scanf("%d",&n) != EOF){
for(i = 0;i < n;i++){
scanf("%lf %d",&base,&exponent);
double result = Power(base,exponent);
if(flag == 0){
printf("INF
");
}
else{
printf("%.2ef
",result);
}
}
}
return 0;
}