数值的整数次方

题目描述:
给定一个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;  
}  
原文地址:https://www.cnblogs.com/tgycoder/p/5236353.html