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 }
大佬见笑,,