再次体现代码封装的威力,分解任务逻辑,只需要封装一个专门输出分数的函数即可。
柳姥姥的代码真的简洁,学到了学到了。
#include<iostream>
#include<cstdio>
using namespace std;
long long a,b,c,d;
long long gcd(long long t1,long long t2){
return t2==0 ? t1:gcd(t2,t1%t2);
}
void func(long long m,long long n) {//处理分数
if(m*n==0) {
printf("%s", n==0?"Inf":"0");//处理除0
return ;
}
bool flag=((m<0 && n>0) || (m>0&&n<0));//符号相异
m=abs(m);n=abs(n);
long long x=m/n;
printf("%s",flag ? "(-" : "");
if(x!=0) printf("%lld",x);
if(m%n==0){
if(flag)printf(")");
return ;//
}
if(x!=0) printf(" ");
m=m-x*n;
long long t=gcd(m,n);
m=m/t;n=n/t;
printf("%lld/%lld%s",m,n,flag ? ")": "");
}
int main(){
scanf("%lld/%lld %lld/%lld", &a,&b,&c,&d);
//分解代码逻辑,只需要封装一个函数专门输出分数即可。
func(a,b); printf(" + ");func(c,d); printf(" = "); func(a*d+b*c,b*d);printf("\n");
func(a,b); printf(" - ");func(c,d); printf(" = "); func(a*d-b*c,b*d);printf("\n");
func(a,b); printf(" * ");func(c,d); printf(" = "); func(a*c,b*d);printf("\n");
func(a,b); printf(" / ");func(c,d); printf(" = "); func(a*d,b*c);
return 0;
}