1034 有理数四则运算

本题要求编写程序,计算 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 #include<math.h>
  3 #include<string.h>
  4 #include<stdlib.h>
  5 #define ll long long 
  6 ll int yueshu(ll int a,ll int b);
  7 ll int change(ll int a,ll int b);
  8 int main()
  9 {
 10     ll int a,b,c,d,e,f;
 11     scanf("%lld/%lld %lld/%lld",&a,&b,&c,&d);
 12     //第一部分 
 13     change(a,b);
 14     printf(" + ");
 15     change(c,d);
 16     printf(" = ");
 17     if(a==0&&c!=0)
 18     {
 19         change(c,d);
 20         printf("\n");
 21   }
 22   else if(a!=0&&c==0)
 23   {
 24         change(a,b);
 25         printf("\n");
 26     }
 27     else if(a==0&&c==0)
 28     {
 29           printf("0\n");
 30     }
 31     else
 32     {
 33           f=b*d;
 34           e=a*d+c*b;
 35           change(e,f);
 36           printf("\n");
 37     }
 38     //第二部分
 39     change(a,b);
 40     printf(" - ");
 41     change(c,d);
 42     printf(" = ");
 43     if(c==0&&a!=0)
 44     {
 45           change(a,b);
 46           printf("\n");
 47     }
 48     else if(a==0&&c!=0)
 49     {
 50           change(-c,d);
 51           printf("\n");
 52     }
 53     else
 54     {
 55           f=b*d;
 56           e=a*d-c*b;
 57           change(e,f);
 58           printf("\n");
 59     }
 60     //第三部分
 61     change(a,b);
 62     printf(" * ");
 63     change(c,d);
 64     printf(" = ");
 65     if(a==0||c==0)
 66     {
 67           printf("0\n");
 68     }
 69     else
 70     {
 71           f=b*d;
 72           e=a*c;
 73           change(e,f);
 74           printf("\n");
 75     }
 76     //第四部分
 77     change(a,b);
 78     printf(" / ");
 79     change(c,d);
 80     printf(" = ");
 81     if(c==0)
 82     {
 83           printf("Inf\n");
 84     }
 85     else if(a==0)
 86     {
 87           printf("0\n");
 88     }
 89     else
 90     {
 91           f=b*c;
 92           e=a*d;
 93         if(f<0)
 94            {
 95                 f=-f;
 96                 e=-e;
 97           }
 98           change(e,f);
 99           printf("\n");
100     }
101     return 0;
102 }
103 ll int yueshu(ll int a,ll int b)
104 {
105     ll int c;
106     c=a%b;
107     while(c!=0)
108     {
109           a=b;
110           b=c;
111           c=a%b;
112     }
113     return b;
114 }
115 ll int change(ll int a,ll int b)
116 {
117     if(a==0)
118     {
119           printf("0");
120     }
121     else if(a<0)
122     {
123         ll int shu;
124         ll int yue=abs(yueshu(a,b));
125         a=a/yue;
126         b=b/yue;
127         shu=a/b;
128     if(shu==0)
129         printf("(%lld/%lld)",a,b);
130     else
131     {
132         if((a-shu*b)!=0)
133             printf("(%lld %lld/%lld)",shu,abs(a-shu*b),b);
134         else
135             printf("(%lld)",shu);
136     }
137   }
138   else if(a>0)
139   {
140         ll int shu;
141         ll int yue=abs(yueshu(a,b));
142         a=a/yue;
143         b=b/yue;
144         shu=a/b;
145     if(shu==0)
146         printf("%lld/%lld",a,b);
147     else
148     {
149         if((a-shu*b)!=0)
150             printf("%lld %lld/%lld",shu,abs(a-shu*b),b);
151         else
152             printf("%lld",shu);
153     }
154     }
155 }

 

 

上一篇:关于python生成2维矩阵的一个简单记录


下一篇:《剑指offer》第十题:斐波那契数列