#include<iostream>
using namespace std;
class KB
{
private:
int fz,fm;//fz代表分子,fm代表分母
public:
KB(int a=0,int b=1)//构造函数,分别用a和b对分子分母进行初始化
{
fz=a,fm=b;
}
int gys(int m,int n);//求两个数的最大公约数
KB add(KB f);//因为要实现分数的相加,而分数又是作为对象,因为返回值类型和参数类型都是类类型
void show()//以正常形式输出分数
{
cout<<fz<<"/"<<fm<<endl;
}
};
int KB::gys(int m,int n)
{
int k,v;
if(m>n)//把两个数中最小的赋值给k
k=n;
else
k=m;
while(k)
{
if(m%k==0&&n%k==0)
break;
else
k--;
}
v=k;//把最大公约数储存在v中
return v;
}
KB KB::add(KB f)
{
KB zk;
int g=(this->fm*f.fm)/gys(this->fm,f.fm);//求出了分母的最大公倍数g=(m*n)/v
zk.fz=(g/this->fm)*this->fz+(g/f.fm)*f.fz;//求出通分后的分子分母
zk.fm=g;
int a=gys(zk.fz,zk.fm);//求出通分后的分子分母的最大公约数用来化简
zk.fz=zk.fz/a;//最简分子分母
zk.fm=zk.fm/a;
return zk;
}
int main()
{
KB zk1(1,5),zk2(6,10),zk3;
zk3=zk1.add(zk2);
zk3.show() ;
}
用c++两个分数相加并且化简成最简形式,通过类来完成。思想是:求出两个数的最大公约数用来化简和求最大公倍数,具体公式代码中见
最新推荐文章于 2022-10-02 15:05:16 发布