首页 > 代码库 > PAT乙级1034. 有理数四则运算(20)

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/32/3 * (-2) = (-1 1/3)2/3 / (-2) = (-1/3)

输入样例2:

5/3 0/6

输出样例2:

1 2/3 + 0 = 1 2/31 2/3 - 0 = 1 2/31 2/3 * 0 = 01 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)