2 条题解

  • 1
    @ 2024-7-26 9:26:35

    服了,100错误,两个还错的不一样。.....

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define rep(i,a,b) for(ll i=a;i<=b;++i)
    #define dwn(i,a,b) for(ll i=a;i>=b;--i) 
     
    template <typename T> inline void rd(T &x){
    	x=0;char c=getchar();int f=0;
    	while(!isdigit(c)){f|=c=='-';c=getchar();}
    	while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
    	x=f?-x:x;
    }
    #define mem(a,b) memset(a,b,sizeof(a))
    
    int a,b,c,d;
    int ans1;//分子 
    int ans2;//分母 
    
    int main(){
        scanf("%d/%d",&a,&b);
        while(scanf("%d/%d",&c,&d)!=EOF){
            int gcd=__gcd(b,d);
            int lcm=b*d/gcd;
            ans2=lcm;//当前分母
            ans1=a*(lcm/b)+c*(lcm/d);//当前分子,请读者自主模拟一下
            a=ans1/(__gcd(ans1,ans2));//下一次计算时,a和b代表的是上一次计算的分子分母,顺便约个分
            b=ans2/(__gcd(ans1,ans2));
        }
        ans1=a;//最后一次处理后a就是ans1,这里赋值的原因是a与b约过一次分了
        ans2=b;//最后一次处理后b就是ans2
        
        if(ans2<0){//处理 2/-3 -> -2/3的情况 
            ans1=-ans1;
            ans2=-ans2;
        }
        if(ans2==1)printf("%d\n",ans1);//处理分母为1的情况
        else printf("%d/%d\n",ans1,ans2);
        return 0;
    }
    

信息

ID
2286
时间
1000ms
内存
512MiB
难度
9
标签
递交数
20
已通过
3
上传者