#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
/*
这一章开始进入代码规范性了 主要是容错 边界处理 变量和函数的命名
以后一定要记得 变量和函数名 命名看出意义 直接用全部英文单词命名,单词首字母大写
出错时的三种处理方式
第一 返回值 windows 很多API 都这么干 返回0 正常 但是这样有缺点就是不能通过返回值表示得到的结果
第二 全局变量 这样还有缺点 就是 容易忘记检查全局变量
第三 异常 这样缺点是代码效率低 很多语言不支持 比如C
这个题目 看到后应该首先考虑 base 和 exp 的正负 情况
还有0的0次方 数学上没有意义
还有 乘方的时候 可以用快速幂高效得到结果
*/
bool IllegalInput;
bool equalDouble(double dnum1,double dnum2)
{
return abs(dnum1-dnum2)<1e-7;//注意double绝对不能用== 的 通常取-7 就够了
}
double PowerWithAbsExp(double base,int exp)
{
if(exp==0)
return 1;
else if(exp==1)
return base;
double res=PowerWithAbsExp(base,exp>>1);
res*=res;
if(exp & 1)
res *=base;
return res;
}
double Power(double base,int exp)
{
IllegalInput=false;
if(equalDouble(base,0.0) && exp<0)
{
IllegalInput=true;
return 0.0;
}
int absexp= abs(exp);
double res=PowerWithAbsExp(base,absexp);
if(exp<0)
res=1.0/res;
return res;
}
int main()
{
double base,exp;
while(scanf("%lf %lf",&base,&exp)!=EOF)
{
double ans=Power(base,exp);
if(IllegalInput)
printf("illegal input\n");
else
printf("%.2lf\n",ans);
}
return 0;
}
剑指offer面试题11 编写pow函数(输入底数 指数 正 0 负的情况 和高效乘方)
最新推荐文章于 2022-04-20 16:32:46 发布