请设计算法,用c++分治法编写完整代码实现 pow(x,n),说明: -100.0 < x < 100.0 , n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。即计算 x 的整数 n 次幂函数,要求在输入一个实数 x 和一个整数 n 后,能够计算出值,并进行最终输出,并进行面向对象编程,列出各项本设计要达到的具体的目标,同时给出编写的类及其成员说明;使用流程图、伪代码或文字,说明核心成员函数的运行原理或流程。
时间: 2023-06-25 09:01:53 浏览: 171
本设计要达到的目标:
1. 用分治法实现 pow(x,n) 函数,提高算法效率;
2. 实现面向对象编程,将 pow(x,n) 函数封装在类中;
3. 实现输入实数 x 和整数 n 后,能够计算出值,并进行最终输出。
类及其成员说明:
1. 类名:Pow
2. 成员函数:
- double dividePow(double x, int n):使用分治法计算 pow(x,n) 函数;
- double pow(double x, int n):调用 dividePow() 函数计算 pow(x,n) 函数;
- void run():读入实数 x 和整数 n,调用 pow() 函数计算 pow(x,n) 函数,并输出结果。
核心成员函数运行原理或流程:
1. dividePow(double x, int n) 函数:
- 若 n == 0,返回 1;
- 若 n < 0,将 n 变为正数,同时将 x 变为其倒数;
- 若 n 为偶数,将 n 折半,递归调用 dividePow() 函数,返回递归结果的平方;
- 若 n 为奇数,先计算 x 的 n-1 次幂,再乘上 x,返回结果。
2. pow(double x, int n) 函数:
- 若 n < 0,将 n 变为正数,同时将 x 变为其倒数;
- 调用 dividePow() 函数计算 pow(x,n) 函数。
3. run() 函数:
- 读入实数 x 和整数 n;
- 调用 pow() 函数计算 pow(x,n) 函数,并输出结果。
流程图如下:
![pow流程图](https://img-blog.csdnimg.cn/20211008143925472.png)
伪代码如下:
```
class Pow {
public:
double dividePow(double x, int n) {
if (n == 0) {
return 1;
} else if (n < 0) {
n = -n;
x = 1 / x;
}
double half = dividePow(x, n / 2);
if (n % 2 == 0) {
return half * half;
} else {
return half * half * x;
}
}
double pow(double x, int n) {
if (n < 0) {
n = -n;
x = 1 / x;
}
return dividePow(x, n);
}
void run() {
double x;
int n;
cin >> x >> n;
cout << pow(x, n) << endl;
}
};
```
完整代码如下:
阅读全文