1034 有理数四则运算(JAVA)

﹏ヽ暗。殇╰゛Y 2023-09-28 18:16 192阅读 0赞

本题要求编写程序,计算 2 个有理数的和、差、积、商。

输入格式:

输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为 0。

输出格式:

分别在 4 行中按照 有理数1 运算符 有理数2 = 结果 的格式顺序输出 2 个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式 k a/b,其中 k 是整数部分,a/b 是最简分数部分;若为负数,则须加括号;若除法分母为 0,则输出 Inf。题目保证正确的输出中没有超过整型范围的整数。

输入样例 1:

  1. 2/3 -4/2

输出样例 1:

  1. 2/3 + (-2) = (-1 1/3)
  2. 2/3 - (-2) = 2 2/3
  3. 2/3 * (-2) = (-1 1/3)
  4. 2/3 / (-2) = (-1/3)

输入样例 2:

  1. 5/3 0/6

输出样例 2:

  1. 1 2/3 + 0 = 1 2/3
  2. 1 2/3 - 0 = 1 2/3
  3. 1 2/3 * 0 = 0
  4. 1 2/3 / 0 = Inf

代码实现:

  1. import java.io.*;
  2. /**
  3. * @author yx
  4. * @date 2022-07-16 20:34
  5. */
  6. public class Main {
  7. static PrintWriter out=new PrintWriter(System.out);
  8. static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
  9. static StreamTokenizer in=new StreamTokenizer(ins);
  10. public static void main(String[] args) throws IOException {
  11. //分步骤切割字符串
  12. String[] split=ins.readLine().split(" ");
  13. String[] fir=split[0].split("/");
  14. String[] sec=split[1].split("/");
  15. long a1=Integer.parseInt(fir[0]);
  16. long b1=Integer.parseInt(fir[1]);
  17. long a2=Integer.parseInt(sec[0]);
  18. long b2=Integer.parseInt(sec[1]);
  19. // System.out.println(-7%2);
  20. if(b1!=0&&b2!=0){
  21. add(a1,b1,a2,b2);
  22. minus(a1,b1,a2,b2);
  23. multiply(a1,b1,a2,b2);
  24. divide(a1,b1,a2,b2);
  25. }
  26. // System.out.println(a1+" "+b1+" "+a2+" "+b2);
  27. }
  28. //处理有理数
  29. static void hua_Jian(long a,long b){
  30. if(a==0){
  31. System.out.print(0);
  32. return;
  33. }
  34. //定义一个哨兵
  35. boolean flag=false;
  36. /*
  37. 这个地方必须先判断再取余
  38. 先取余,再判断的话会影响a的正负性质
  39. */
  40. if(a<0){
  41. System.out.print("(-");
  42. a=-a;
  43. flag=true;
  44. }
  45. //对a/b进行化简
  46. long g=gcd(a,b);
  47. a=a/g;
  48. b=b/g;
  49. //下面这种写法不可取,因为a=a/gcd(a,b),此时的a已经发生改变
  50. //这个时候b=b/gcd(a,b)得出来的答案不正确
  51. // a=a/gcd(a,b);
  52. // b=b/gcd(a,b);
  53. // if(a%b==0){
  54. // System.out.print(a/b);
  55. // }else {
  56. /*
  57. a有可能会为负数,不能用a/b>1
  58. 而是Math.abs(a)>b
  59. */
  60. // if(a/b>1){
  61. // System.out.print(a/b+" "+(a%b)+"/"+b);
  62. // }else if(a==b){
  63. // System.out.print(1);
  64. // }else {
  65. // System.out.print(a+"/"+b);
  66. // }
  67. // }
  68. if (a % b == 0) {
  69. System.out.print(a / b);
  70. } else if (Math.abs(a) > b) {
  71. System.out.print(a / b + " " + (a % b) + "/" + b);
  72. } else if (a == b) {
  73. System.out.print(1);
  74. } else {
  75. System.out.print(a + "/" + b);
  76. }
  77. if(flag){
  78. System.out.print(")");
  79. }
  80. }
  81. //加
  82. static void add(long a1,long b1,long a2,long b2){
  83. hua_Jian(a1,b1);
  84. System.out.print(" + ");
  85. hua_Jian(a2,b2);
  86. System.out.print(" = ");
  87. hua_Jian(a1*b2+a2*b1,b1*b2);
  88. System.out.println();
  89. }
  90. //减
  91. static void minus(long a1,long b1,long a2,long b2){
  92. hua_Jian(a1,b1);
  93. System.out.print(" - ");
  94. hua_Jian(a2,b2);
  95. System.out.print(" = ");
  96. hua_Jian(a1*b2-a2*b1,b1*b2);
  97. System.out.println();
  98. }
  99. //乘
  100. static void multiply(long a1,long b1,long a2,long b2){
  101. hua_Jian(a1,b1);
  102. System.out.print(" * ");
  103. hua_Jian(a2,b2);
  104. System.out.print(" = ");
  105. hua_Jian(a1*a2,b1*b2);
  106. System.out.println();
  107. }
  108. //除
  109. static void divide(long a1,long b1,long a2,long b2){
  110. hua_Jian(a1,b1);
  111. System.out.print(" / ");
  112. hua_Jian(a2,b2);
  113. System.out.print(" = ");
  114. if(a2==0){
  115. System.out.println("Inf");
  116. return;
  117. }
  118. if(a2<0){
  119. hua_Jian(-1*a1*b2,-1*a2*b1);
  120. }else {
  121. hua_Jian(a1*b2,a2*b1);
  122. }
  123. }
  124. //最大公约数
  125. static long gcd(long m,long n){
  126. return n==0?m:gcd(n,m%n);
  127. }
  128. }

发表评论

表情:
评论列表 (有 0 条评论,192人围观)

还没有评论,来说两句吧...

相关阅读

    相关 有理数四则运算

    本题要求编写程序,计算 2 个有理数的和、差、积、商。 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围

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

    本题要求编写程序,计算2个有理数的和、差、积、商。 输入格式: 输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数