干货!!!分数的加减乘除源代码

过年了,小编来给大家发福利了!!!需要的拿走,这是分数的加减乘除如何用程序实现?

#include<iostream>
#include<cmath>
struct beg
{
	int up;    //表示分数的分子
	int down;   //表示分数的分母
};
beg reduction(beg a);
beg add(beg a,beg b);
beg redu(beg a,beg b);
beg mul(beg a,beg b);
beg div(beg a,beg b);
int gcd(int a,int b);
using namespace std;

int main()
{
	beg a,b;  //a,b是两个分数
	cout<<"请输入第一个分数:";
	cin>>a.up>>a.down;
	cout<<"请输入第二个分数:";
	cin>>b.up>>b.down;
	a=reduction(a);    //化简分数
	b=reduction(b);
	beg c[4];
	c[0]=add(a,b);
	c[1]=redu(a,b);
	if(a.up==0)   //若前一个分数位0,则将相乘和相除都设置为分母为1,分子为0
	{
		c[2].up=c[3].up=0;
		c[2].down=c[3].down=1;
	}
	else 
	{
		c[2]=mul(a,b);
		c[3]=div(a,b);
	}
	for(int i=0;i<4;i++)  //对结果化简
	{
		c[i]=reduction(c[i]);
	}
	for(int i=0;i<4;i++)
	{
		if(i==3&&c[i].down==0)  
		{
			cout<<"抱歉,无法相除"<<endl;
			return 0;
		}
		if(c[i].up<c[i].down)  cout<<c[i].up<<"/"<<c[i].down<<endl;  //真分数情况
		else   //假分数情况
		{
			int x=c[i].up/c[i].down;
			c[i].up%=c[i].down;
			cout<<x<<" "<<c[i].up<<"/"<<c[i].down<<endl;
		}
	}
	return 0;
}

//求最大公约数函数
int gcd(int a,int b)
{
	if(b==0)  return a;
	else  return gcd(b,a%b);	
}

//对分数化简函数
beg reduction(beg a)
{
	if(a.down<0)  //若分母为0,则将分数上下交换符号
	{
		a.up=-a.up;
		a.down=a.down;
	}
	if(a.up==0)  a.down=1; 
	else   //此时已经确保分母不为负数了 
	{
		int x=gcd(abs(a.down),abs(a.up));
		a.up/=x;
		a.down/=x;
	}
	return a;
}

//加法函数
beg add(beg a,beg b)
{
	beg c;
	c.up=a.up*b.down+b.up*a.down;
	c.down=a.down*b.down;
	return c;
}

//减法函数
beg redu(beg a,beg b)
{
	beg c;
	c.down=a.down*b.down;
	c.up=a.up*b.down-b.up*a.down;
	return c;	
}

//乘法函数
beg mul(beg a,beg b)
{
	beg c;
	c.down=a.down*b.down;
	c.up=a.up*b.up;
	return c;
}

//除法函数
beg div(beg a,beg b)
{
	beg c; 
	c.up=a.up*b.down;
	c.down=b.up*a.down;
	return c;
}
发布了7 篇原创文章 · 获赞 0 · 访问量 159

猜你喜欢

转载自blog.csdn.net/TpeterH/article/details/104080430