PTA basic 1034 有理数四则运算 (20 分) c语言实现(gcc 14分)

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






这题搞心态,测试点2 3 没通过,提交牛客网通过, 抄的大佬作业https://www.liuchuo.net/archives/492,没想通哪里不对




 1 #include "stdio.h"
 2 #include "stdlib.h"
 3 #include "string.h"
 4 #include "math.h"
 5 //最简分数
 6 //判定一个分数是不是最简分数,需要得到两个数的最小公约数,如果最大公约数是1,则是最简分数
 7 //最大公约数要用碾除法求得 碾除法是 使用两个数中较大的那个数对较小的数取余,直到结果为0,其中较小的数就是最大公约数
 8 
 9 long long maxDivisor(long long a,long long b){//最小公约数  要求都为正数
10     return b==0?a:maxDivisor(b, a%b);
11 }
12 
13 
14 //结果化简并输出
15 void simp_prin(long long a,long long b){
16     //积是否为0或者除数是否为0
17     if(a*b==0){
18         printf("%s",b==0?"Inf":"0");
19         return;
20     }
21     //是否异号
22     int flag=((a>0&&b<0)||(a<0&&b>0));
23     //取绝对值
24     a=abs(a);b=abs(b);
25     printf("%s",flag?"(-":"");
26     if(a/b!=0)printf("%lld",a/b);
27     if(a%b==0){
28         if(flag)printf(")");
29         return;
30     }
31     long maxdivi=maxDivisor(abs(a),abs(b));
32     if(a/b!=0)printf(" ");
33     printf("%lld/%lld%s",(a%b)/maxdivi,b/maxdivi,flag?")":"");
34 }
35 
36 int main(){
37     long long a1,a2,b1,b2;
38     scanf("%lld/%lld %lld/%lld",&a1,&a2,&b1,&b2);
39     simp_prin(a1,a2);printf(" + ");simp_prin(b1, b2);printf(" = ");simp_prin(a1*b2+a2*b1, a2*b2);printf("\n");
40     simp_prin(a1,a2);printf(" - ");simp_prin(b1, b2);printf(" = ");simp_prin(a1*b2-a2*b1, a2*b2);printf("\n");
41     simp_prin(a1,a2);printf(" * ");simp_prin(b1, b2);printf(" = ");simp_prin(a1*b1, a2*b2);printf("\n");
42     simp_prin(a1,a2);printf(" / ");simp_prin(b1, b2);printf(" = ");simp_prin(a1*b2, a2*b1);
43     return 0;
44 }

 

posted @ 2021-04-25 20:24  keiiha  阅读(200)  评论(0编辑  收藏  举报