#include<cstdio>#include<algorithm>usingnamespace std;typedeflonglong ll;struct fraction {
ll up, down;}a, b;typedefstruct fraction fra;voidPrint(fra a);
fra Add(fra a, fra b);
fra Reduce(fra a, fra b);
fra Mul(fra a, fra b);
fra Division(fra a, fra b);
fra simply(fra a);
ll gcd(ll a, ll b);intmain(){scanf("%lld/%lld %lld/%lld",&a.up,&a.down,&b.up,&b.down);
a =simply(a);
b =simply(b);char sym[4]={'+','-','*','/'};for(int i =0; i <4; i++){
fra ret;switch(sym[i]){case'+':ret =Add(a, b);break;case'-':ret =Reduce(a, b);break;case'*':ret =Mul(a, b);break;case'/':ret =Division(a, b);break;}Print(a);printf(" %c ", sym[i]);Print(b);printf(" = ");if(ret.down==0)printf("Inf");elsePrint(ret);printf("\n");}return0;}voidPrint(fra a){if(a.up <0)printf("(");if(a.down ==1)printf("%lld", a.up);elseif(abs(a.up)> a.down)printf("%lld %lld/%lld", a.up / a.down,abs(a.up)%a.down, a.down);elseprintf("%lld/%lld", a.up, a.down);if(a.up <0)printf(")");}
fra Add(fra a, fra b){
fra ret;
ret.up = a.up*b.down + a.down*b.up;
ret.down = a.down*b.down;returnsimply(ret);}
fra Reduce(fra a, fra b){
fra ret;
ret.up = a.up*b.down - a.down*b.up;
ret.down = a.down*b.down;returnsimply(ret);}
fra Mul(fra a, fra b){
fra ret;
ret.up = a.up*b.up;
ret.down = a.down*b.down;returnsimply(ret);}
fra Division(fra a, fra b){
fra ret;
ret.up = a.up*b.down;
ret.down = a.down*b.up;returnsimply(ret);}
fra simply(fra a){if(a.down <0){
a.up =-a.up;
a.down =-a.down;}if(a.up ==0) a.down =1;else{
ll d =gcd(abs(a.up),abs(a.down));
a.up /= d;
a.down /= d;}return a;}
ll gcd(ll a, ll b){return!b ? a :gcd(b, a%b);}
1034 有理数四则运算解题代码测试结果问题整理解题代码#include<cstdio>#include<algorithm>using namespace std;typedef long long ll;struct fraction { ll up, down;}a, b;typedef struct fraction fra;void Print(fra a);fra Add(fra a, fra b);fra Reduce(fra a, fra b)