主要是先判斷兩分數的正負值,再來把所有正負移到分子方便運算。
最後在輸出的時候在制定一下規則即可,中間有埋一些檢查code
#include <iostream>
#include <cmath>
using namespace std;
int gcd(int a, int b){
int temp;
while(b>0){
a=a%b;
temp=a;
a=b;
b=temp;
}
return a;
}
int main(){
long long int a,b,c,d,tempb,tempd;
char Op;
bool flag1,flag2;
while(cin>>a>>b>>c>>d>>Op){
if(a>0&&b<0){a=a*(-1);b=b*(-1);}
if(c>0&&d<0){c=c*(-1);d=d*(-1);}
if(a<0&&b<0){a=a*(-1);b=b*(-1);}
if(c<0&&d<0){c=c*(-1);d=d*(-1);}
tempd=abs(d);
tempb=abs(b);
a=a*tempd;b=b*tempd;c=c*tempb;d=d*tempb;
// cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
switch(Op){
case '+':
a=a+c;
break;
case '-':
a=a-c;
break;
case '*':
a=a*c;
b=b*d;
break;
case '/':
a=a*d;
b=b*c;
break;
}
if(a>0&&b>0)
flag1=1;
if(a<0&&b<0)
flag1=1;
if(a>0&&b<0)
flag1=0;
if(a<0&&b>0)
flag1=0;
a=abs(a);b=abs(b);
// cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
if(a==0||b==0)
cout<<0<<endl;
else if(a%b==0&&flag1==1)
cout<<a/b<<endl;
else if(a%b==0&&flag1==0)
cout<<-1*a/b<<endl;
else if(flag1==0){
cout<<-1*a/gcd(a,b)<<"/"<<b/gcd(a,b)<<endl;
}
else
cout<<a/gcd(a,b)<<"/"<<b/gcd(a,b)<<endl;
}
}