1、使用结构体来存储分数的分子和分母
2、对分数指定规则
1、使分母为非负数,如果分数为负,则令分子为负数即可
2、如果分数为零,则规定分子为零,分母为1
3、分子和分母没有除1以外的公约数
3、分数的化简
1、若分母为负数,则令分子和分母都变为相反数
2、若分子为零,则令分母为1
3、约分,求出分子绝对值与分母绝对值的最大公约数,然后令分子分母同时除以公约数
#include<iostream>
using namespace std;
struct Fraction{
int up,down;
};
int gcd(int a,int b)
{
if(b==0)return a;
else return gcd(b,a%b);
}
Fraction reduction(Fraction result)
{
if(result.down<0){//分母为负数,令分子分母都变为相反数
result.up=-result.up;
result.down=-result.down;
}
if(result.up==0)//若分子为0
{
result.down=1;//令分母为1
}
else{//若分母不为0,则进行约分
int d=gcd(abs(result.up),abs(result.down));//分子分母的最大公约数
result.up/=d;//约去最大公约数
result.down/=d;
}
return result;
}
//分数的输出
void showFraction(Fraction r)
{
//原则一:先进行化简
r = reduction(r);
//原则二:如果是整数
if (r.down == 1)//分母为0
printf("%d", r.up);//直接输出分子
//原则三:如果是假分数
else if (abs(r.up) > abs(r.down))//分子大于分母
{
int a = r.up / r.down;
r.up = abs(r.up) % r.down;//注意这里的绝对值
printf("%d %d/%d\n", a, r.up, r.down);
}
else{
printf("%d/%d", r.up,r.down);//直接输出
}
}
int main()
{
Fraction result;
Fraction f;
f.up = 7;
f.down = 6;
result = reduction(f);
showFraction(result);
return 0;
}