1088 Rational Arithmetic

再次体现代码封装的威力,分解任务逻辑,只需要封装一个专门输出分数的函数即可。
柳姥姥的代码真的简洁,学到了学到了。

完整代码

#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;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容