• 有理数四则运算 PTA1034


    题目:https://pintia.cn/problem-sets/994805260223102976/problems/994805287624491008

    本题要求编写程序,计算 2 个有理数的和、差、积、商。

    输入格式:

    输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为 0。

    输出格式:

    分别在 4 行中按照 有理数1 运算符 有理数2 = 结果 的格式顺序输出 2 个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式 k a/b,其中 k 是整数部分,a/b 是最简分数部分;若为负数,则须加括号;若除法分母为 0,则输出 Inf。题目保证正确的输出中没有超过整型范围的整数。

    输入样例 1:

    2/3 -4/2
    

    输出样例 1:

    2/3 + (-2) = (-1 1/3)
    2/3 - (-2) = 2 2/3
    2/3 * (-2) = (-1 1/3)
    2/3 / (-2) = (-1/3)
    

    输入样例 2:

    5/3 0/6
    

    输出样例 2:

    1 2/3 + 0 = 1 2/3
    1 2/3 - 0 = 1 2/3
    1 2/3 * 0 = 0
    1 2/3 / 0 = Inf

    题解:我碰到的都是一些什么神仙题啊,本题的关键就是对分子分母的处理,计算没什么难度,我用%64d输出输出一直错误,调了一下午,怪我喽!
    还有pta里面好像不能用abs()函数,会有浮点错误。
    代码:
      1 #include <map>
      2 #include <stack>
      3 #include <queue>
      4 #include <cmath>
      5 #include <string>
      6 #include <limits>
      7 #include <cstdio>
      8 #include <vector>
      9 #include <cstdlib>
     10 #include <cstring>
     11 #include <iostream>
     12 #include <algorithm>
     13 #define Scc(c) scanf("%c",&c)
     14 #define Scs(s) scanf("%s",s)
     15 #define Sci(x) scanf("%d",&x)
     16 #define Sci2(x, y) scanf("%d%d",&x,&y)
     17 #define Sci3(x, y, z) scanf("%d%d%d",&x,&y,&z)
     18 #define Scl(x) scanf("%I64d",&x)
     19 #define Scl2(x, y) scanf("%I64d%I64d",&x,&y)
     20 #define Scl3(x, y, z) scanf("%I64d%I64d%I64d",&x,&y,&z)
     21 #define Pri(x) printf("%d
    ",x)
     22 #define Prl(x) printf("%I64d
    ",x)
     23 #define Prc(c) printf("%c
    ",c)
     24 #define Prs(s) printf("%s
    ",s)
     25 #define For(i,x,y) for(int i=x;i<y;i++)
     26 #define For_(i,x,y) for(int i=x;i<=y;i++)
     27 #define FFor(i,x,y) for(int i=x;i>y;i--)
     28 #define FFor_(i,x,y) for(int i=x;i>=y;i--)
     29 #define Mem(f, x) memset(f,x,sizeof(f))
     30 #define LL long long
     31 #define ULL unsigned long long
     32 #define MAXSIZE 100005
     33 #define INF 0x3f3f3f3f
     34 
     35 const int mod=1e9+7;
     36 const double PI = acos(-1.0);
     37 
     38 using namespace std;
     39 LL GCD(LL a,LL b)
     40 {
     41     return b==0?a:GCD(b,a%b) ;
     42 }
     43 LL abss(LL a)
     44 {
     45     if(a<0)
     46         return a*(-1);
     47     return a;
     48 }
     49 void check(LL a,LL b)
     50 {
     51 
     52     if(b==0)
     53     {
     54         printf("Inf");
     55         return ;
     56     }
     57     else if(a==0)
     58     {
     59         printf("0");
     60         return ;
     61     }
     62     LL t=GCD(abss(a),abss(b));
     63     a=a/t;
     64     b=b/t;
     65     LL tmp=a/b;
     66     if(a*b<0)//判断a 、b是异号还是同号
     67     {
     68         printf("(");
     69         if(tmp!=0)
     70         {
     71             printf("%lld",tmp);
     72             if(abss(a)!=abss(tmp*b))
     73                 printf(" %lld/%lld",abss(a)-abss(tmp*b),abss(b));
     74         }
     75         else
     76         {
     77             printf("-%lld/%lld",abss(a),abss(b));
     78         }
     79         printf(")");
     80     }
     81     else if(a*b>0)
     82     {
     83         if(tmp!=0)
     84         {
     85             printf("%lld",tmp);
     86             if(abss(a)-abss(tmp*b)!=0)
     87                 printf(" %lld/%lld",abss(a)-abss(tmp*b),abss(b));
     88         }
     89         else
     90             printf("%lld/%lld",abss(a),abss(b));
     91     }
     92 }
     93 int main()
     94 {
     95     LL a,b,c,d;
     96     scanf("%lld/%lld",&a,&b);
     97     scanf("%lld/%lld",&c,&d);
     98     LL x,y;
     99     x=a*d+b*c,y=b*d;
    100     check(a,b);
    101     printf(" + ");
    102     check(c,d);
    103     printf(" = ");
    104     check(x,y);
    105     Prs("");
    106     x=a*d-b*c,y=b*d;
    107     check(a,b);
    108     printf(" - ");
    109     check(c,d);
    110     printf(" = ");
    111     check(x,y);
    112     Prs("");
    113     x=a*c;
    114     y=b*d;
    115     check(a,b);
    116     printf(" * ");
    117     check(c,d);
    118     printf(" = ");
    119     check(x,y);
    120     Prs("");
    121     x=a*d;
    122     y=c*b;
    123     check(a,b);
    124     printf(" / ");
    125     check(c,d);
    126     printf(" = ");
    127     check(x,y);
    128     Prs("");
    129     return 0;
    130 }
    View Code
  • 相关阅读:
    利用 SASS 简化 `nth-child` 样式的生成
    `http-equiv` meta 标签
    Currying 及应用
    理解 Redux 的中间件
    git clone 仓库的部分代码
    JavaScript Map 和 Set
    C++ 变量判定的螺旋法则
    CSS transition 的默认值
    `MediaDevices.getUserMedia` `undefined` 的问题
    MediaDevices.getUserMedia` undefined 的问题
  • 原文地址:https://www.cnblogs.com/hbhdhd/p/11420895.html
Copyright © 2020-2023  润新知