过年了,小编来给大家发福利了!!!需要的拿走,这是分数的加减乘除如何用程序实现?
#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;
}