您的位置:首页 > 职场人生

代码的完整性-面试题11-数值的整数次方

2016-10-02 22:44 337 查看
一、规范的代码:

1、清晰的书写

2、清晰的布局

3、合理的命名

二、代码的完整性

1、功能测试

2、边界测试

3、负面测试

三、错误处理方法

1、函数返回值来告知调用者是否出错。

优点:和系统API一致

缺点:不能方便地使用计算结果

2、设置一个全局变量

优点:能够方便地使用计算结果

缺点:用户可能会忘记检查变量

3、发生错误抛出异常

优点:可以为不同的出错原因定义不同异常类型,逻辑清晰明了

缺点:有些语言不支持异常,抛出异常时对性能有负面影响

数值的整数次方


题目描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

可能漏掉的情况:

1、exponent可能为负,所以正数,负数要分开讨论

2、0的0次方为1,0的正数次方也为1,但是0的负数次方出错,这里使用全局变量的方法告知

3、由于计算机表示小数(float、double)都有误差,我们不能直接用等号(==)判断两个小数是否相等。如果两个小数的差的绝对值很小,比如小于0.0000001,就可以认为它们相等

4、


5、用右移运算符代替了除以2,用位与运算符代替了求余运算符%来判断一个数是奇数还是偶数。位运算的效率比乘除高的多。

Code:

class Solution {
public:
double Power(double base, int exponent) {
bool isInvalidResult=false;
bool isNegative=false;
if(exponent<0){
if(abs(base-0)<0.0000001){
isInvalidResult=true;
return 0.0;
}
isNegative=true;
exponent=-exponent;
}
if(exponent == 0)
return 1;
if(exponent == 1)
return base;
double res=Power(base,exponent>>1);
res *= res;
if(exponent & 0x1 == 1)
res*=base;

return isNegative==false?res:1.0/res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息