• 【PAT甲级】1088 Rational Arithmetic (20 分)


    题意:

    输入两个分数(分子分母各为一个整数中间用'/'分隔),输出它们的四则运算表达式。小数需要用"("和")"括起来,分母为0的话输出"Inf"(输入的分母保证不为0)。

    trick:

    测试点2很容易溢出,建议遇到乘法时先化简分数并且不要用相乘小于零来判断异号。

    AAAAAccepted code:

      1 #define HAVE_STRUCT_TIMESPEC
      2 #include<bits/stdc++.h>
      3 using namespace std;
      4 int main(){
      5     ios::sync_with_stdio(false);
      6     cin.tie(NULL);
      7     cout.tie(NULL);
      8     long long a,b,c,d;
      9     cin>>a;
     10     cin.ignore();
     11     cin>>b>>c;
     12     cin.ignore();
     13     cin>>d;
     14     long long x=1e9,y=1e9;
     15     if(a%b==0)
     16         x=a/b;
     17     if(c%d==0)
     18         y=c/d;
     19     long long gcd=__gcd(a,b);
     20     a/=gcd;
     21     b/=gcd;
     22     gcd=__gcd(c,d);
     23     c/=gcd;
     24     d/=gcd;
     25     if(x<1e9){
     26         if(x<0)
     27             cout<<"("<<x<<")";
     28         else
     29             cout<<x;
     30     }
     31     else{
     32         long long ta=a,tb=b;
     33         if(ta<0&&tb>0||ta>0&&tb<0){
     34             if(ta<0)
     35                 ta=-ta;
     36             if(tb<0)
     37                 tb=-tb;
     38             long long yushu=0;
     39             if(ta>tb){
     40                 yushu=ta/tb;
     41                 ta-=yushu*tb;
     42             }
     43             cout<<"(-";
     44             if(yushu)
     45                 cout<<yushu<<" ";
     46             cout<<ta<<"/"<<tb<<")";
     47         }
     48         else{
     49             long long yushu=0;
     50             if(ta>tb){
     51                 yushu=ta/tb;
     52                 ta-=yushu*tb;
     53             }
     54             if(yushu)
     55                 cout<<yushu<<" ";
     56             cout<<ta<<"/"<<tb;
     57         }
     58     }
     59     cout<<" + ";
     60     if(y<1e9){
     61         if(y<0)
     62             cout<<"("<<y<<")";
     63         else
     64             cout<<y;
     65     }
     66     else{
     67         long long ta=c,tb=d;
     68         if(ta<0&&tb>0||ta>0&&tb<0){
     69             if(ta<0)
     70                 ta=-ta;
     71             if(tb<0)
     72                 tb=-tb;
     73             long long yushu=0;
     74             if(ta>tb){
     75                 yushu=ta/tb;
     76                 ta-=yushu*tb;
     77             }
     78             cout<<"(-";
     79             if(yushu)
     80                 cout<<yushu<<" ";
     81             cout<<ta<<"/"<<tb<<")";
     82         }
     83         else{
     84             long long yushu=0;
     85             if(ta>tb){
     86                 yushu=ta/tb;
     87                 ta-=yushu*tb;
     88             }
     89             if(yushu)
     90                 cout<<yushu<<" ";
     91             cout<<ta<<"/"<<tb;
     92         }
     93     }
     94     cout<<" = ";
     95     long long cd=b*d;
     96     long long ab=a*d+c*b;
     97     if(ab%cd==0){
     98         long long z=ab/cd;
     99         if(z<0)
    100             cout<<"("<<z<<")";
    101         else
    102             cout<<z;
    103     }
    104     else if(ab<0&&cd>0||ab>0&&cd<0){
    105         if(ab<0)
    106             ab=-ab;
    107         if(cd<0)
    108             cd=-cd;
    109         long long yushu=0;
    110         if(ab>cd){
    111             yushu=ab/cd;
    112             ab-=yushu*cd;
    113         }
    114         long long gcd=__gcd(ab,cd);
    115         ab/=gcd;
    116         cd/=gcd;
    117         cout<<"(-";
    118         if(yushu)
    119             cout<<yushu<<" ";
    120         cout<<ab<<"/"<<cd<<")";
    121     }
    122     else{
    123         long long yushu=0;
    124         if(ab>cd){
    125             yushu=ab/cd;
    126             ab-=yushu*cd;
    127         }
    128         long long gcd=__gcd(ab,cd);
    129         ab/=gcd;
    130         cd/=gcd;
    131         if(yushu)
    132             cout<<yushu<<" ";
    133         cout<<ab<<"/"<<cd;
    134     }
    135     cout<<"
    ";
    136     //加减法分割线-------------
    137     if(x<1e9){
    138         if(x<0)
    139             cout<<"("<<x<<")";
    140         else
    141             cout<<x;
    142     }
    143     else{
    144         long long ta=a,tb=b;
    145         if(ta<0&&tb>0||ta>0&&tb<0){
    146             if(ta<0)
    147                 ta=-ta;
    148             if(tb<0)
    149                 tb=-tb;
    150             long long yushu=0;
    151             if(ta>tb){
    152                 yushu=ta/tb;
    153                 ta-=yushu*tb;
    154             }
    155             cout<<"(-";
    156             if(yushu)
    157                 cout<<yushu<<" ";
    158             cout<<ta<<"/"<<tb<<")";
    159         }
    160         else{
    161             long long yushu=0;
    162             if(ta>tb){
    163                 yushu=ta/tb;
    164                 ta-=yushu*tb;
    165             }
    166             if(yushu)
    167                 cout<<yushu<<" ";
    168             cout<<ta<<"/"<<tb;
    169         }
    170     }
    171     cout<<" - ";
    172     if(y<1e9){
    173         if(y<0)
    174             cout<<"("<<y<<")";
    175         else
    176             cout<<y;
    177     }
    178     else{
    179         long long ta=c,tb=d;
    180         if(ta<0&&tb>0||ta>0&&tb<0){
    181             if(ta<0)
    182                 ta=-ta;
    183             if(tb<0)
    184                 tb=-tb;
    185             long long yushu=0;
    186             if(ta>tb){
    187                 yushu=ta/tb;
    188                 ta-=yushu*tb;
    189             }
    190             cout<<"(-";
    191             if(yushu)
    192                 cout<<yushu<<" ";
    193             cout<<ta<<"/"<<tb<<")";
    194         }
    195         else{
    196             long long yushu=0;
    197             if(ta>tb){
    198                 yushu=ta/tb;
    199                 ta-=yushu*tb;
    200             }
    201             if(yushu)
    202                 cout<<yushu<<" ";
    203             cout<<ta<<"/"<<tb;
    204         }
    205     }
    206     cout<<" = ";
    207     cd=b*d;
    208     ab=a*d-c*b;
    209     if(ab%cd==0){
    210         long long z=ab/cd;
    211         if(z<0)
    212             cout<<"("<<z<<")";
    213         else
    214             cout<<z;
    215     }
    216     else if(ab<0&&cd>0||ab>0&&cd<0){
    217         if(ab<0)
    218             ab=-ab;
    219         if(cd<0)
    220             cd=-cd;
    221         long long yushu=0;
    222         if(ab>cd){
    223             yushu=ab/cd;
    224             ab-=yushu*cd;
    225         }
    226         long long gcd=__gcd(ab,cd);
    227         ab/=gcd;
    228         cd/=gcd;
    229         cout<<"(-";
    230         if(yushu)
    231             cout<<yushu<<" ";
    232         cout<<ab<<"/"<<cd<<")";
    233     }
    234     else{
    235         long long yushu=0;
    236         if(ab>cd){
    237             yushu=ab/cd;
    238             ab-=yushu*cd;
    239         }
    240         long long gcd=__gcd(ab,cd);
    241         ab/=gcd;
    242         cd/=gcd;
    243         if(yushu)
    244             cout<<yushu<<" ";
    245         cout<<ab<<"/"<<cd;
    246     }
    247     cout<<"
    ";
    248     //减法和乘除法分隔线-------------
    249     if(x<1e9){
    250         if(x<0)
    251             cout<<"("<<x<<")";
    252         else
    253             cout<<x;
    254     }
    255     else{
    256         long long ta=a,tb=b;
    257         if(ta<0&&tb>0||ta>0&&tb<0){
    258             if(ta<0)
    259                 ta=-ta;
    260             if(tb<0)
    261                 tb=-tb;
    262             long long yushu=0;
    263             if(ta>tb){
    264                 yushu=ta/tb;
    265                 ta-=yushu*tb;
    266             }
    267             cout<<"(-";
    268             if(yushu)
    269                 cout<<yushu<<" ";
    270             cout<<ta<<"/"<<tb<<")";
    271         }
    272         else{
    273             long long yushu=0;
    274             if(ta>tb){
    275                 yushu=ta/tb;
    276                 ta-=yushu*tb;
    277             }
    278             if(yushu)
    279                 cout<<yushu<<" ";
    280             cout<<ta<<"/"<<tb;
    281         }
    282     }
    283     cout<<" * ";
    284     if(y<1e9){
    285         if(y<0)
    286             cout<<"("<<y<<")";
    287         else
    288             cout<<y;
    289     }
    290     else{
    291         long long ta=c,tb=d;
    292         if(ta<0&&tb>0||ta>0&&tb<0){
    293             if(ta<0)
    294                 ta=-ta;
    295             if(tb<0)
    296                 tb=-tb;
    297             long long yushu=0;
    298             if(ta>tb){
    299                 yushu=ta/tb;
    300                 ta-=yushu*tb;
    301             }
    302             cout<<"(-";
    303             if(yushu)
    304                 cout<<yushu<<" ";
    305             cout<<ta<<"/"<<tb<<")";
    306         }
    307         else{
    308             long long yushu=0;
    309             if(ta>tb){
    310                 yushu=ta/tb;
    311                 ta-=yushu*tb;
    312             }
    313             if(yushu)
    314                 cout<<yushu<<" ";
    315             cout<<ta<<"/"<<tb;
    316         }
    317     }
    318     cout<<" = ";
    319     cd=b*d;
    320     ab=a*c;
    321     if(ab%cd==0){
    322         long long z=ab/cd;
    323         if(z<0)
    324             cout<<"("<<z<<")";
    325         else
    326             cout<<z;
    327     }
    328     else if(ab<0&&cd>0||ab>0&&cd<0){
    329         if(ab<0)
    330             ab=-ab;
    331         if(cd<0)
    332             cd=-cd;
    333         long long yushu=0;
    334         if(ab>cd){
    335             yushu=ab/cd;
    336             ab-=yushu*cd;
    337         }
    338         long long gcd=__gcd(ab,cd);
    339         ab/=gcd;
    340         cd/=gcd;
    341         cout<<"(-";
    342         if(yushu)
    343             cout<<yushu<<" ";
    344         cout<<ab<<"/"<<cd<<")";
    345     }
    346     else{
    347         long long yushu=0;
    348         if(ab>cd){
    349             yushu=ab/cd;
    350             ab-=yushu*cd;
    351         }
    352         long long gcd=__gcd(ab,cd);
    353         ab/=gcd;
    354         cd/=gcd;
    355         if(yushu)
    356             cout<<yushu<<" ";
    357         cout<<ab<<"/"<<cd;
    358     }
    359     cout<<"
    ";
    360     //乘除法分隔线-------------
    361     if(x<1e9){
    362         if(x<0)
    363             cout<<"("<<x<<")";
    364         else
    365             cout<<x;
    366     }
    367     else{
    368         long long ta=a,tb=b;
    369         if(ta<0&&tb>0||ta>0&&tb<0){
    370             if(ta<0)
    371                 ta=-ta;
    372             if(tb<0)
    373                 tb=-tb;
    374             long long yushu=0;
    375             if(ta>tb){
    376                 yushu=ta/tb;
    377                 ta-=yushu*tb;
    378             }
    379             cout<<"(-";
    380             if(yushu)
    381                 cout<<yushu<<" ";
    382             cout<<ta<<"/"<<tb<<")";
    383         }
    384         else{
    385             long long yushu=0;
    386             if(ta>tb){
    387                 yushu=ta/tb;
    388                 ta-=yushu*tb;
    389             }
    390             if(yushu)
    391                 cout<<yushu<<" ";
    392             cout<<ta<<"/"<<tb;
    393         }
    394     }
    395     cout<<" / ";
    396     if(y<1e9){
    397         if(y<0)
    398             cout<<"("<<y<<")";
    399         else
    400             cout<<y;
    401     }
    402     else{
    403         long long ta=c,tb=d;
    404         if(ta<0&&tb>0||ta>0&&tb<0){
    405             if(ta<0)
    406                 ta=-ta;
    407             if(tb<0)
    408                 tb=-tb;
    409             long long yushu=0;
    410             if(ta>tb){
    411                 yushu=ta/tb;
    412                 ta-=yushu*tb;
    413             }
    414             cout<<"(-";
    415             if(yushu)
    416                 cout<<yushu<<" ";
    417             cout<<ta<<"/"<<tb<<")";
    418         }
    419         else{
    420             long long yushu=0;
    421             if(ta>tb){
    422                 yushu=ta/tb;
    423                 ta-=yushu*tb;
    424             }
    425             if(yushu)
    426                 cout<<yushu<<" ";
    427             cout<<ta<<"/"<<tb;
    428         }
    429     }
    430     cout<<" = ";
    431     cd=b*c;
    432     ab=a*d;
    433     if(cd==0){
    434         cout<<"Inf";
    435         return 0;
    436     }
    437     if(ab%cd==0){
    438         long long z=ab/cd;
    439         if(z<0)
    440             cout<<"("<<z<<")";
    441         else
    442             cout<<z;
    443     }
    444     else if(ab<0&&cd>0||ab>0&&cd<0){
    445         if(ab<0)
    446             ab=-ab;
    447         if(cd<0)
    448             cd=-cd;
    449         long long yushu=0;
    450         if(ab>cd){
    451             yushu=ab/cd;
    452             ab-=yushu*cd;
    453         }
    454         long long gcd=__gcd(ab,cd);
    455         ab/=gcd;
    456         cd/=gcd;
    457         cout<<"(-";
    458         if(yushu)
    459             cout<<yushu<<" ";
    460         cout<<ab<<"/"<<cd<<")";
    461     }
    462     else{
    463         long long yushu=0;
    464         if(ab>cd){
    465             yushu=ab/cd;
    466             ab-=yushu*cd;
    467         }
    468         long long gcd=__gcd(ab,cd);
    469         ab/=gcd;
    470         cd/=gcd;
    471         if(yushu)
    472             cout<<yushu<<" ";
    473         cout<<ab<<"/"<<cd;
    474     }
    475     return 0;
    476 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    JavaScript基础知识——异步和单线程
    JavaScript基础知识——作用域和闭包
    JavaScript基础知识——原型和原型链
    JavaScript基础知识——变量类型与计算
    JavaScript 学者必看“new”
    Javascript中颇受诟病的「this错乱」问题
    Python之路
    Python
    Python
    python所遇问题合集(持续更新)
  • 原文地址:https://www.cnblogs.com/ldudxy/p/11890333.html
Copyright © 2020-2023  润新知