PAT乙级1034. 有理数四则运算(20)

Posted Annetree的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT乙级1034. 有理数四则运算(20)相关的知识,希望对你有一定的参考价值。

本题要求编写程序,计算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


  1 #include<stdio.h>
  2 int gong(long long a,long long b)
  3 {
  4     long long r,min,max;
  5     min=(a>b)?b:a;
  6     max=(a>b)?a:b;
  7     r=max%min;
  8     while(r)
  9     {
 10         max=min;
 11         min=r;
 12         r=max%min;
 13     }
 14     return min;
 15 }
 16 void print(long long a,long long b)
 17 {
 18     long long flag=0,c,d,e;
 19     if(a<0){
 20         a=-a;
 21         flag=1;
 22     }
 23     if(a==0) printf("0");
 24     else{
 25         e=gong(a,b);
 26         a/=e;
 27         b/=e;
 28         c=a/b;
 29         d=a%b;
 30         if(flag==0){
 31             if(d==0) printf("%lld",c);
 32             else{
 33                 if(c==0) printf("%lld/%lld",a,b);
 34                 else printf("%lld %lld/%lld",c,d,b);
 35             }
 36         }
 37         else{
 38             if(d==0) printf("(-%lld)",c);
 39             else{
 40                 if(c==0) printf("(-%lld/%lld)",a,b);
 41                 else printf("(-%lld %lld/%lld)",c,d,b);
 42             }
 43         }
 44     }
 45 }
 46 void add(long long a1,long long b1,long long a2,long long b2)
 47 {
 48     print(a1,b1);
 49     printf(" + ");
 50     print(a2,b2);
 51     printf(" = ");
 52     print(a1*b2+a2*b1,b1*b2);
 53     printf("\n");
 54 }
 55 void minus(long long a1,long long b1,long long a2,long long b2)
 56 {
 57     print(a1,b1);
 58     printf(" - ");
 59     print(a2,b2);
 60     printf(" = ");
 61     print(a1*b2-a2*b1,b1*b2);
 62     printf("\n");
 63 }
 64 void muilt(long long a1,long long b1,long long a2,long long b2)
 65 {
 66     print(a1,b1);
 67     printf(" * ");
 68     print(a2,b2);
 69     printf(" = ");
 70     print(a1*a2,b1*b2);
 71     printf("\n");
 72 }
 73 void divide(long long a1,long long b1,long long a2,long long b2)
 74 {
 75     print(a1,b1);
 76     printf(" / ");
 77     print(a2,b2);
 78     printf(" = ");
 79     if(a2==0) printf("Inf\n");
 80     else{
 81         if(a2<0){
 82             a2=-a2;
 83             a1=-a1;
 84         }
 85         print(a1*b2,b1*a2);
 86         printf("\n");
 87     }
 88 }
 89 int main()
 90 {
 91     long long a1,b1,a2,b2;
 92     while(~scanf("%lld/%lld %lld/%lld",&a1,&b1,&a2,&b2))
 93     {
 94         add(a1,b1,a2,b2);
 95         minus(a1,b1,a2,b2);
 96         muilt(a1,b1,a2,b2);
 97         divide(a1,b1,a2,b2);
 98     }
 99     return 0;
100 }

 


以上是关于PAT乙级1034. 有理数四则运算(20)的主要内容,如果未能解决你的问题,请参考以下文章

PAT乙级1034. 有理数四则运算(20)

pat 乙级1034

PAT1034 有理数四则运算 (20分)

PAT 1034. 有理数四则运算

PAT Basic 1034

1034. 有理数四则运算(20)