- /*
- copyright@nciaebupt 转载请注明出处
- 题目:实现函数double Power(double base,int exponent),求base的exponent次方。
- 不得使用库函数,同时不需要考虑大树问题。
- 分析:
- 这道题目有以下几点需要注意:
- 1. 0的0次方是无意义的,非法输入
- 2. 0的负数次方相当于0作为除数,也是无意义的,非法输入
- 3. base如果非0,如果指数exponent小于0,可以先求base的|exponent|次方,然后再
- 求倒数
- 4. 任何数的0次方都为0
- 5. 判断double类型的base是否等于0不能使用==号。因为计算机表述小树(包括float
- 和double型小数)都有误差,不能直接使用等号(==)判断两个小数是否相等。如果两
- 个数的差的绝对值很小,那么可以认为两个double类型的数相等。
- */
- #include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
bool invalidInput = false;
bool equal(double num1, double num2){ //对一个double型数相等的判断;
if(num1 - num2 > -0.0000001 && num1 - num2 < 0.0000001)
return true;
return false;
}
double Power(double base, int exponent) { //注意分母不能为零。
if(equal(base, 0.0) && exponent < 0){
invalidInput = true;
return 0.0;
}
if(exponent == 0){
return 1;
}
int absexponent = exponent;
if(exponent < 0){
absexponent = - exponent;
}
double result = 1.0;
for(int i = 0; i < absexponent; i++)
result = result*base;
if(exponent < 0) //负指数幂求和后应取倒数;
result = 1.0/result;
return result;
}
int main()
{
double n;
int m;
while(cin>>n>>m) {
printf("%lf\n", Power(n, m));
}
return 0;
}
实现函数double Power(double base,int exponent),求base的exponent次方
最新推荐文章于 2021-03-13 07:46:01 发布