JZ-C-11

剑指offer第十一题:数值的整数次方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//============================================================================
// Name        : JZ-C-11.cpp
// Author      : Laughing_Lz
// Version     :
// Copyright   : All Right Reserved
// Description : 数值的整数次方
//============================================================================
 
#include <iostream>
using namespace std;
 
bool equal(double num1, double num2);
double Power(double base, int exponent) {
    double result = 1;
    if (exponent > 0) {
        if (equal(base, 0.0)) {
            result = 0;
        } else {
            while (exponent > 0) {
                result = result * base;
                exponent--;
            }
        }
    } else if (exponent == 0) {
        if (equal(base, 0.0)) { //这里不能直接判断exponent == 0,原因:计算机内表示小数时都有误差,判断判断两个小数是否相等,只能判断它们之差的绝对值是不是在一个很小的范围,如小于0.0000001★★
            cout << "无意义" << endl;
            result = 0; //0的0次方没意义★★
        } else {
            result = 1;
        }
    } else {
        if (equal(base, 0.0)) {
            result = 0;
        } else {
            exponent = -exponent; //取绝对值
            while (exponent > 0) {
                result = result * base;
                exponent--;
            }
            result = 1 / result;
        }
 
    }
    return result;
}
bool equal(double num1, double num2) { //判断两个小数是否相等★★
    if ((num1 - num2 > -0.0000001) && (num1 - num2 < 0.0000001)) {
        return true;
    } else {
        return false;
    }
}
/*
 *这里没有使用此函数,此函数好处在于位运算的效率比乘除法及求余运算效率高
 */
/*double PowerWithUnsignedExponent(double base, unsigned int exponent) {
    if (exponent == 0) {
        return 1;
    }
    if (exponent == 1) {
        return base;
    }
    double result = PowerWithUnsignedExponent(base, exponent >> 1);//用右移代替除以2 ★
    result *= result;
    if ((exponent & 0x1) == 1) {//用与运算判断指数是奇数或偶数 ★
        result *= base;
    }
    return result;
}*/
 
int main() {
    double result = Power(9, 5);
    cout << result << endl;
    return 0;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注