PAT测试不支持%I64d 可以使用%lld,,被坑了好久。但是题目没有难度
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
long long gcd(long long a,long long b){
if(a<0){
a=-a;
}
if(b<0){
b=-b;
}
long long t;
if(a<b){
t=a;
a=b;
b=t;
}
long long n;
while(b){
n=a%b;
a=b;
b=n;
}
return a;
}
void print1(long long num,long long deno){
long long flag=gcd(deno,num);
int temp=0;
num=num/flag;deno=deno/flag;
if((num*deno)<0){
cout<<'(';
temp=1;
}
if(deno<0){
num=-num;
deno=-deno;
}
long long num1=abs(num);
if(num==0){
cout<<0;
}
else if(deno==1){
cout<<num;
}
else if(num1<deno){
cout<<num<<'/'<<deno;
}
else{
long long k=num/deno;
num=num1%deno;
cout<<k<<' '<<num<<'/'<<deno;
}
if(temp){
cout<<')';
}
return ;
}
void Sum(long long a,long long b,long long c,long long d){
long long deno,num,flag;
deno=b*d;
num=a*d+c*b;
print1(a,b);
cout<<' '<<'+'<<' ';
print1(c,d);
cout<<' '<<'='<<' ';
print1(num,deno);
cout<<endl;
return ;
}
void Dif(long long a,long long b,long long c,long long d){
long long deno,num,flag;
deno=b*d;
num=a*d-c*b;
// flag=gcd(deno,num);
// num=num/flag;deno=deno/flag;
print1(a,b);
cout<<' '<<'-'<<' ';
print1(c,d);
cout<<' '<<'='<<' ';
print1(num,deno);
cout<<endl;
return ;
}
void Pro(long long a,long long b,long long c,long long d){
long long deno,num,flag;
deno=b*d;
num=a*c;
// flag=gcd(deno,num);
// num=num/flag;deno=deno/flag;
print1(a,b);
cout<<' '<<'*'<<' ';
print1(c,d);
cout<<' '<<'='<<' ';
print1(num,deno);
cout<<endl;
return ;
}
void Quo(long long a,long long b,long long c,long long d){
if(c==0){
print1(a,b);
cout<<' '<<'/'<<' ';
print1(c,d);
cout<<' '<<'='<<' ';
printf("Inf");
return ;
}
long long deno,num,flag;
deno=b*c;
num=a*d;
// flag=gcd(deno,num);
// num=num/flag;deno=deno/flag;
print1(a,b);
cout<<' '<<'/'<<' ';
print1(c,d);
cout<<' '<<'='<<' ';
print1(num,deno);
return ;
}
int main(){
long long a,b,c,d;
scanf("%lld/%lld%lld/%lld",&a,&b,&c,&d);//输入用%lld
// cout<<a<<' '<<b<<' '<<c<<' '<<d<<endl;
Sum(a,b,c,d);
Dif(a,b,c,d);
Pro(a,b,c,d);
Quo(a,b,c,d);
return 0;
}