阶乘的概念
1.什么是阶乘?
阶乘在数学里的定义为:
阶乘是指从1乘以2乘以3乘以4一直乘到所要求的数。
例如:求4的阶乘,则阶乘式是1×2×3×4,得到的积是24,24就是4的阶乘。
2.阶乘的表示方法
任何大于1的自然数n阶乘表示方法: n!=1×2×3×……×n 或 n!=n×(n-1)!
例如:5的阶乘表示为5!,4的阶乘表示为4!,以此类推。
3.特别地:数学里规定0的阶乘为1,即0!=1 。(这个要特别注意)
类体功能描述
我们要利用C++中的“类”结构,实现求n!,那么我们首先必须要明确如何构建这个类,它有哪些数据成员和方法,怎么实现相应的功能,递归??亦或是乘积的累积??
1.确定类的数据成员
通过阶乘的概念,我们知道n!=1×2×3×……×n,那么我们至少要定义两个数据成员才能满足需求。为什么要定义两个数据成员?定义一个进行乘积的累积不就行了吗?!
因为0!=1,是一个特殊的情况, 我们定义一个数据用来接收初始值,如求哪个数的阶乘;定义另一个数据,让这个数据初始值为1,再通过不断累积乘积,最终得到结果。
2.确定类的方法
首先我们最容易想到的就是构造函数,包含无参构造函数和有参构造函数,虽然系统会自动补充一个无参构造函数,但是仍建议进行创建。
其次,我们需要进行阶乘的乘积累积计算,因此需要定义一个用于计算的函数。同时,我们需要输出计算结果,因此也要定义一个输出结果的函数。
明确了类的功能后,下一步我们就开始编写程序,如果看程序感到疑惑,记得到这里再看一遍分析哦。
代码实现
具体的代码实现,如下所示。
//导入头文件
#include <iostream>
#include<stdio.h>
using namespace std;
//定义Factorial类
class Factorial {
public:
//无参构造函数
Factorial(){}
//有参构造函数
Factorial(int value){
n=value; //赋值
nowNumber=1; //令累积值默认为1(当求0!时,结果为1)
}
void product();//声明product函数(用于计算)
void display();//声明display函数(用于输出计算结果)
private:
int n;//储存要求的数
int nowNumber;//记录当前的累积值
};
//定义product函数
void Factorial::product() {
int i=n;
while(i>1){
nowNumber=(nowNumber*(i--)); //储存乘积的累积值(计算的关键)
}
}
//定义display函数
void Factorial::display(){
cout<<n<<"的阶乘为:"<<n<<"!="<<nowNumber; //采用(n!=xxxxxx形式)
cout<<endl;//换行
}
//说明:有些编译器要求主函数返回值类型为void,不是int,根据要求更改int main为void main即可
//主函数
int main(){
int value; //定义一个整型数据
cout<<"请输入value值:";
cin>>value; //输入要求的阶乘数值
Factorial Fa(value);//创建一个Factorial类对象Fa,并调用有参构造函数进行赋初始值
Fa.product(); //调用求阶乘的函数
Fa.display (); //调用输出函数
return 0;//可加可不加(不影响程序运行)
}
代码运行结果
小结
在上述步骤中,通过明确概念、清晰原理、分析类的结构及类的代码实现,完成了利用C++类结构求n!,如果感到困惑,不妨多看一遍。
写在最后:
读两遍下来,如果仍然有不清楚的地方,可在评论区留言。
如果你有其他感到困惑的问题,欢迎在评论区留言,让我看到你的问题哦。