PTA乙级题 1034. 有理数四则运算(20)
这题还是直接上大佬代码吧,自己写的很乱。
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
void out(long long int a,long long int b){
long long int temp_a=a;
if(b<0) {b=-b;a=-a;temp_a=a;}
//cout<<a<<' '<<b<<' ';
long long int c=a/b;
a=abs(a);
long long int d=a%b;
long long int e=gcd(d,b);
if(c==0){
if(d==0) cout<<0;
else if(temp_a>0) printf("%d/%d",d/e,b/e);
else if(temp_a<0) printf("(-%d/%d)",d/e,b/e);
}else if(c>0){
if(d==0) printf("%d",c);
else printf("%d %d/%d",c,d/e,b/e);
}else{
if(d==0) printf("(%d)",c);
else printf("(%d %d/%d)",c,d/e,b/e);
}
}
int main(){
long long int a1,b1,a2,b2;
scanf("%lld/%lld %lld/%lld",&a1,&b1,&a2,&b2);
/*add*/
out(a1,b1);cout<<" + ";out(a2,b2);cout<<" = ";out(a1*b2+a2*b1,b1*b2);cout<<endl;
/*subtract*/
out(a1,b1);cout<<" - ";out(a2,b2);cout<<" = ";out(a1*b2-a2*b1,b1*b2);cout<<endl;
/*multiply*/
out(a1,b1);cout<<" * ";out(a2,b2);cout<<" = ";out(a1*a2,b1*b2);cout<<endl;
/*divide*/
out(a1,b1);cout<<" / ";out(a2,b2);cout<<" = ";
if(a2==0) cout<<"Inf";
else out(a1*b2,b1*a2);
return 0;
}