题目描述

 使用Java实现分数的四则运算,每行输入一次运算,只考虑两个分数之间的运算。

输入示例

 输入
 1/3 \ 5/8
 输出
 8/15

 输入
 2/3 + 4/3
 2

算法思路

  1. 获得输入分数的分子分母和运算符
  2. 求出分母的最小公倍数,即求出分母的最大公约数
  3. 匹配运算规则

我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《C语言四种方法求最大公约数》, 一起来围观吧

注意事项

  1. 参与运算的分数,分母不能为 0,需要对无效的分数进行处理
  2. 参与运算的分数,分子为 0 时,对于乘法而言,直接判定结果为 0;对于除法而言,除数为 0 时,直接判定结果为 0,被除数不能为 0(同样为无效的分数)
  3. 对于运算的结果,需要要进行化简;如果结果为正,省略 + 号,结果为负,输出第一位应该为 - 号

实现代码

import java.util.*;public class Solution {public static int findMaxDivisor(int num1, int num2){//0.欧几里得法求最大公约数int a, b;if (num1 > num2){a = Math.abs(num1);   b = Math.abs(num2);}else {b = Math.abs(num1);   a = Math.abs(num2);}int demp = a%b;if (demp == 0)return b;elsereturn findMaxDivisor(b,demp);}public static void fractionOper(String operation) {//0.获得分数和运算符String[] members = operation.split("\\s");String num1 = members[0];String num2 = members[2];String oper = members[1];//1.获得分子分母int[] mol = new int[2];int[] den = new int[2];String[] num = num1.split("/");mol[0] = Integer.parseInt(num[0]);den[0] = Integer.parseInt(num[1]);num = num2.split("/");mol[1] = Integer.parseInt(num[0]);den[1] = Integer.parseInt(num[1]);//2.找到最大公约数int mutiple = 0;int maxDivisor = findMaxDivisor(den[0], den[1]);mutiple = den[0]/maxDivisor*den[1];//3.根据运算符匹配计算int mols, dens;switch (oper){case "+":{mols = mol[0] * (den[1]/maxDivisor) + mol[1] * (den[0]/maxDivisor);if (mols == 0){System.out.println(0);}else {maxDivisor = findMaxDivisor(mols,mutiple);if (mols % mutiple == 0)System.out.println(mols/mutiple);elseSystem.out.println(mols/maxDivisor + "/" + mutiple/maxDivisor);}break;}case "-":{mols = mol[0] * (den[1]/maxDivisor) - mol[1] * (den[0]/maxDivisor);if (mols == 0){System.out.println(0);}else {maxDivisor = findMaxDivisor(mols, mutiple);if (mols % mutiple == 0)System.out.println(mols / mutiple);elseSystem.out.println(mols / maxDivisor + "/" + mutiple / maxDivisor);}break;}case "*":{if (mol[0] == 0||mol[1] == 0){System.out.println(0);} else{mols = mol[0]*mol[1];dens = den[0]*den[1];maxDivisor = findMaxDivisor(mols,dens);String mark = mols*dens >0? "": "-";if ( mols % dens == 0)System.out.println(mols / dens);elseSystem.out.println(mark+ Math.abs(mols)/maxDivisor+ "/"+ Math.abs(dens)/maxDivisor);break;}}case "\\":{if (mol[0] == 0)System.out.println(0);else if (mol[1] == 0)return;else {mols = mol[0]*den[1];dens = den[0]*mol[1];maxDivisor = findMaxDivisor(mols,dens);String mark = mols*dens >0? "": "-";if (mols % dens == 0)System.out.println(mols / dens);elseSystem.out.println(mark+ Math.abs(mols)/maxDivisor+ "/"+ Math.abs(dens)/maxDivisor);break;}break;}}}public static void main(String[] args) {Scanner sc = new Scanner(System.in);String operation = sc.nextLine();fractionOper(operation);}
}

Java实现分数的四则运算相关推荐

  1. java有理数类的封装_第4章类与对象==有理数的类封装(分数的四则运算)

    问题; 对分数进行四则运算,使结果仍然是分数 代码: Test.java public class Test { public static void main(String[]args){ Rati ...

  2. 《算法笔记》学习日记——5.2 最大公约数与最小公倍数5.3 分数的四则运算5.4 素数

    目录 5.2 最大公约数与最小公倍数 问题 A: Least Common Multiple 小结 5.3 分数的四则运算 问题 A: 分数矩阵 小结 5.4 素数 问题 A: 素数 问题 B: Pr ...

  3. C++实现分数的四则运算

    代码如下,需要的自取,给个赞就好. #include<iostream> #include<stdlib.h> #include<cstdio> using nam ...

  4. 分数的四则运算及化简(C语言实现)

    下面这个程序使用C语言的结构体实现了分数的加减乘除四则运算,同时将结果最简化.这里为了简化,将输入值固定了,如果需要根据输入进行计算,将main函数内的相应部分稍作修改即可. #include < ...

  5. 用Java实现分数加减和乘法计算

    用Java实现分数加法和乘法计算(新手) 直接上代码,分别手动输入两个分数的分子和分母 import java.util.Scanner; public class Main { public sta ...

  6. java实现分数四则运算

    java分数四则运算 java实现简单的分数四则运算(大一小白,希望有大佬评论指正) package 作业; import java.util.Scanner; public class Fracti ...

  7. Java:一个分数类的简单设计

    这个类对于分数提供化简和加减乘除四种操作,基于"不变"的设计原则,因此是线程安全的. 其中使用了几个算法: [1]Fraction simpler(Fraction f);//分数 ...

  8. java用栈处理四则运算_Java 用栈处理四则运算

    import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Stack; imp ...

  9. python分数约分_python分数的四则运算

    适用于初学着看看,没有很深入的知识与语法,大神可以越过. 代码 class Arithmetic(object): def __init__(self, p, q): self.p = p self. ...

最新文章

  1. 轻松学Pytorch – 行人检测Mask-RCNN模型训练与使用
  2. 服务器响应的生成:HTTP响应报头——HttpServletResponse接口的应用
  3. 博客作业05--查找
  4. GT Transceiver中的重要时钟及其关系(2)单个外部参考时钟使用模型
  5. 数据处理的两个基本问题05 - 零基础入门学习汇编语言42
  6. 40.4. SOCKS
  7. 【今日CV 视觉论文速览】 07 Dec 2018
  8. python接口自动化(四十四)- 公共模块configparser读取ini数据库、邮箱配置文件(单独说明)
  9. 高可用结合gfs2,,实现集群文件系统以及集群逻辑卷。
  10. Python使用日常
  11. php socket 超时设置
  12. ListView嵌套ListView优化
  13. WebSocket开发说明文档
  14. 心电信号越界怎么回事_一种心电信号处理方法
  15. oracle用nas还是本地存储,为什么大家都在用NAS网络存储?
  16. 彻底解决IE9 文本框无法输入文字,IE窗口闪烁问题(亲测)
  17. java 解析 json 索引对象_怎么获取json对象的属性和值
  18. 我每天都要打开的8个在线网站,很有用~
  19. Oracle笔记本(1102)
  20. c语言学生成绩管理系统设计分析,参阅:C语言学生成绩管理系统设计

热门文章

  1. 49 QT打包应用程序
  2. 全屋Wi-Fi领域「兵戎相见」,鸿雁这一局赢面大不大?
  3. android TextView webView 显示 html table 标签内容
  4. 蓝屏谁的错!!XP蓝屏代码集!!!
  5. agps 位置服务器,agps可用的服务器地址
  6. 2023年全球及中国安全气囊行业头部企业市场占有率及排名调研报告
  7. 站在男生立场评女生的各种拒绝法
  8. 迈拓恢复出厂设置图解_如何把硬盘恢复出厂设置
  9. modbus详细介绍(值得收藏)
  10. 如何批量复制word文件名到excel?