• 洛谷 P1572 计算分数


    题目描述

    Csh被老妈关在家里做分数计算题,但显然他不愿意坐这么多复杂的计算。况且在家门口还有Xxq在等着他去一起看电影。为了尽快地能去陪Xxq看电影,他把剩下的计算题交给了你,你能帮他解决问题吗?

    输入输出格式

    输入格式:

     

    输入一行,为一个分数计算式。计算式中只包含数字、’+’、’-‘、’/’。其中’/’为分数线,分数线左边为分子,右边为分母。输入数据保证不会出现繁分数。如果输入计算式的第一项为正,不会有前缀’+’号;若为负,会有前缀’-‘号。

    所有整数均以分数形式出现。

     

    输出格式:

     

    输出一行,为最后的计算结果(用最简分数或整数表示)

     

    输入输出样例

    输入样例#1: 复制
    2/1+1/3-1/4
    输出样例#1: 复制
    25/12

    说明

    对于所有测试点,输入计算式长度在100以内,分子、分母在1000以内。

     思路:模拟。

     错因:分母通分的时候,直接乘,爆掉了long long,应该改成最小公倍数。

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int tot;
    long long ans=1,ans1;
    string s;
    struct nond{
        int first,second,pos;
    }v[101];
    int gcd(long long x,long long y){
        return x==0?y:gcd(y%x,x);
    }
    int main(){
        cin>>s;
        if(s[0]!='-')    s='+'+s;
        int len=s.length(),sum=0;
        for(int i=0;i<len;i++){
            if(s[i]>='0'&&s[i]<='9')    sum*=10,sum+=s[i]-'0';
            else{
                if(s[i]=='/')    v[tot].first=sum;
                else{
                    v[tot].second=sum;
                    if(s[i]=='+')    v[++tot].pos=1;
                    else if(s[i]=='-')    v[++tot].pos=-1; 
                }sum=0;
            }
        }
        v[tot].second=sum;
        ans=v[1].second;
        for(int i=2;i<=tot;i++)
            ans=(v[i].second*ans)/gcd(v[i].second,ans);
        for(int i=1;i<=tot;i++){
            int GCD=gcd(v[i].first,v[i].second);
            v[i].first/=GCD;v[i].second/=GCD;
            v[i].first*=ans/v[i].second;
            ans1+=v[i].pos*v[i].first; 
        }
        if(ans/gcd(ans,abs(ans1))==1)    cout<<ans1/gcd(abs(ans1),ans);
        else cout<<ans1/gcd(abs(ans1),ans)<<"/"<<ans/gcd(abs(ans1),ans);
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    usage of tmux docker
    mac. mysql
    使用ssh远程编辑
    systemd-udevadm
    iperf
    brctl
    NAT
    Linux 网络配置
    Linux 命令行快捷键
    sed 参数分析
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/8148714.html
Copyright © 2020-2023  润新知