#14187: C++ AC 用了好多if...


kev8067@gmail.com (卓承緯)

學校 : 不指定學校
編號 : 74409
來源 : []
最後登入時間 :
2018-01-11 15:15:59
b538. 分數運算-2 -- 分數四則 | From: [223.140.24.249] | 發表日期 : 2018-06-22 15:50

主要是先判斷兩分數的正負值,再來把所有正負移到分子方便運算。

最後在輸出的時候在制定一下規則即可,中間有埋一些檢查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;

}




}

 

 
ZeroJudge Forum