参考《算法笔记》
#include<cstdio>
#include<algorithm>
using namespace std;
struct Fraction{
int up;
int down;
};
int gcd(int a,int b){
if(b==0){
return a;
}
return gcd(b,a%b);
}
Fraction reduction(Fraction result){
if(result.down<result.up){
result.up = -result.up;
result.down = -result.down;
}
if(result.up==0){
result.down == 1;
}else{
int d = gcd(result.up,result.down);
result.up/=d;
result.down/=d;
}
return result;
}
Fraction add(Fraction f1, Fraction f2){
Fraction result;
result.up = f1.up*f2.down+f2.up*f1.down;
result.down = f1.down*f2.down;
return reduction(result);
}
Fraction minu(Fraction f1,Fraction f2){
Fraction result;
result.up =f1.up*f2.down - f2.up*f1.down;
result.down = f1.down*f2.down;
return reduction(result);
}
Fraction multi(Fraction f1,Fraction f2){
Fraction result;
result.up = f1.up*f2.up;
result.down = f1.down*f2.down;
return reduction(result);
}
Fraction divide(Fraction f1,Fraction f2){
Fraction result;
result.up = f1.up*f2.down;
result.down = f2.up*f1.down;
return reduction(result);
}
void showFraction(Fraction result){
r= reduction(result);
if(r.down==1) printf("%d",r.up);
if(abs(r.up)>r.down){
printf("%d %d/%d",r.up/r.down,abs(r.up)%r.down,r.down);
}else{
printf("%d/%d",r.up,r.down);
}
}
int main(){
Fraction result;
Fraction f1;
f1.up = 6;
f1.down = 7;
Fraction f2;
f2.up = 5;
f2.down = 6;
result = add(f1,f2);
printf("%d / %d",result.up,result.down);
return 0;
}