题目1514:数值的整数次方
时间限制:1 秒内存限制:128 兆特殊判题:否提交:1549解决:425
题目描述:
给定一个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 <memory.h>
#include <math.h>
#include <stdlib.h>
using namespace std;
double PowerWithUnsignedExponent (double base, unsigned int exponent){
if (exponent == 0)
return 1.0;
if (exponent == 1)
return base;
double ans = PowerWithUnsignedExponent (base, exponent >> 1);
ans *= ans;
if (exponent & 0x01 == 1){
ans *= base;
}
return ans;
}
double power(double base,int exp){
if(base ==0||(base==0&&exp>0)){
return 0.0;
}
unsigned int absExp = (unsigned int)abs (exp);
if(exp<0){
absExp = (unsigned int)(-exp);
}
double result = PowerWithUnsignedExponent(base,absExp);
if(exp<0){
result = 1.0/result;
}
return result;
}
int main(){
int n,exp;
double base;
scanf("%d",&n);
while(n--){
scanf("%lf%d",&base,&exp);
double ans = power(base,exp);
if (ans != 0.0)
printf ("%.2ef\n", ans);
else if (base == 0.0 && exp >= 0)
printf ("%.2ef\n", 0.0);
else
printf ("INF\n");
}
return 0;
}
oj地址