面试题11:数值的整数次方

要注意的问题:

1. 指数为0或者是负数

2. 判断小数误差切记不能用 == ,因为计算机内表示小数时(包括float和double型小数)都有误差。判断两个小数是否相等,只能判断它们之差的绝对值是否在一个很小的范围内

 1 bool g_InvalidInput = false;
 2 bool equal(double num1, double num2);
 3 double PowerWithUnsignedExponent(double base, unsigned int exponent);
 4  
 5 double Power(double base, int exponent)
 6 {
 7     g_InvalidInput = false;
 8  
 9     if(equal(base, 0.0) && exponent < 0)
10     {
11         g_InvalidInput = true;
12         return 0.0;
13     }
14  
15     unsigned int absExponent = (unsigned int)(exponent);
16     if(exponent < 0)
17         absExponent = (unsigned int)(-exponent);
18  
19     double result = PowerWithUnsignedExponent(base, absExponent);
20     if(exponent < 0)
21         result = 1.0 / result;
22  
23     return result;
24 }
25  
26 
27 double PowerWithUnsignedExponent(double base, unsigned int exponent)
28 {
29     double result = 1.0;
30     /
31     for(int i = 1; i <= exponent; ++i)
32         result *= base;
33  
34     return result;
35 }
36 
37 bool equal(double num1, double num2)
38 {
39     if((num1 - num2 > -0.0000001)
40         && (num1 - num2 < 0.0000001))
41         return true;
42     else
43         return false;
44 }
原文地址:https://www.cnblogs.com/raichen/p/5639967.html