注意
负数前面要加括号
#include<bits/stdc++.h> using namespace std; struct Fraction{ int up, down; }; int gcd(int a, int b){ return b==0? a: gcd(b, a%b); } Fraction reduction(Fraction a){ if(a.up == 0){ a.down = 1; }else if(a.down < 0){ a.up = -a.up; a.down = -a.down; }else{ int d= gcd(abs(a.up), a.down); a.up = a.up/d; a.down = a.down/d; } return a; } void show(Fraction a){ a = reduction(a); if(a.up<0) printf("("); if(a.down == 1) printf("%d",a.up); else if(abs(a.up) > a.down){ printf("%d %d/%d", a.up/a.down,abs(a.up)%a.down,a.down); }else printf("%d/%d",a.up%a.down,a.down); if(a.up<0) printf(")"); } Fraction add(Fraction a, Fraction b){ Fraction res; res.up = a.up*b.down + b.up*a.down; res.down = a.down * b.down; return reduction(res); } Fraction sub(Fraction a, Fraction b){ Fraction res; res.up = a.up*b.down - b.up*a.down; res.down = a.down * b.down; return reduction(res); } Fraction mul(Fraction a, Fraction b){ Fraction res; res.up = a.up * b.up; res.down = a.down * b.down; return reduction(res); } Fraction div(Fraction a, Fraction b){ Fraction res; res.up = a.up * b.down; res.down = a.down * b.up; return reduction(res); } int main(){ int a,b; Fraction f1,f2,ans; scanf("%d/%d",&a,&b); f1.up = a; f1.down = b; scanf("%d/%d",&a,&b); f2.up = a; f2.down = b; //加 show(f1); printf(" + "); show(f2); printf(" = "); show(add(f1,f2)); printf("\n"); //减 show(f1); printf(" - "); show(f2); printf(" = "); show(sub(f1,f2)); printf("\n"); //乘 show(f1); printf(" * "); show(f2); printf(" = "); show(mul(f1,f2)); printf("\n"); //除 show(f1); printf(" / "); show(f2); printf(" = "); if(f2.up == 0) printf("Inf\n"); else { show(div(f1,f2)); printf("\n"); } return 0; }