请设计算法,用c++分治法,写出完整代码,实现 pow(x,n),说明: -100.0 < x < 100.0 , n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。即计算 x 的整数 n 次幂函数,要求在输入一个实数 x 和一个整数 n 后,能够计算出值,并进行最终输出,并进行面向对象编程,列出各项本设计要达到的具体的目标,同时给出编写的类及其成员说明;使用流程图、伪代码或文字,说明核心成员函数的运行原理或流程。
时间: 2023-06-23 11:10:17 浏览: 90
本设计的目标是实现一个能够计算 x 的整数 n 次幂函数的程序,并使用分治法进行优化,使其能够在较短时间内完成计算。
类的设计:
类名:Pow
成员变量:
double x:底数 x;
int n:指数 n;
成员函数:
double pow():计算 x 的 n 次幂,并返回计算结果。
核心成员函数 pow() 运行原理或流程:
1. 如果指数 n 为 0,返回 1;
2. 如果指数 n 小于 0,把指数变为相反数,并把底数取倒数;
3. 如果指数 n 是偶数,将指数除以 2,并将底数平方;
4. 如果指数 n 是奇数,将指数减 1,将底数乘以 x;
5. 重复步骤 3 和 4,直到指数 n 等于 0;
6. 返回底数的值。
代码实现:
```c++
#include <iostream>
using namespace std;
class Pow {
private:
double x; // 底数
int n; // 指数
public:
Pow(double x, int n) : x(x), n(n) {}
double pow() {
if(n == 0) return 1;
if(n < 0) {
x = 1 / x;
n = -n;
}
double res = 1;
while(n != 0) {
if(n % 2 == 1) res *= x;
x *= x;
n /= 2;
}
return res;
}
};
int main() {
double x;
int n;
cout << "请输入底数 x 和指数 n:" << endl;
cin >> x >> n;
Pow p(x, n);
cout << "结果为:" << p.pow() << endl;
return 0;
}
```
流程图:
![pow分治法流程图](https://img-blog.csdnimg.cn/20211011181235986.png)
伪代码:
```c++
Pow(x, n):
if n == 0:
return 1
if n < 0:
x = 1 / x
n = -n
res = 1
while n != 0:
if n % 2 == 1:
res *= x
x *= x
n /= 2
return res
```
阅读全文