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; }