题目描述

 使用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. 手把手教你在多种无监督聚类算法实现Python(附代码)
  2. vue脚手架 全局变量可以是变量吗_Vue.js2 全局变量的设置方法
  3. 编写TreeSet类的实现程序,其中相关的迭代器使用二叉查找树
  4. 努比亚连续按下android版本,虚惊一场!努比亚Z17的Android 9.0真的不远了
  5. KMP Trie 例题讲解
  6. FIFA的完整形式是什么?
  7. Window7无法访问 Window server 2008 R2文件服务器的共享
  8. 使用详解_Log4j2使用详解
  9. 【输入一个数,判断是否为素数(质数)】
  10. Kafka 各版本下载指南
  11. linux apache 503,Apache ProxyPass出现503 Service Temporarily Unavailable错误
  12. [AV1] 谈谈AV1中的 S-Frame
  13. 跟着老猫来搞GO-基础进阶
  14. CSS (二) 背景
  15. 关于IE浏览器打开部分页面的开发人员工具时闪退打不开的问题
  16. ping指定包大小的命令格式(windows linux)
  17. C++程序设计基础实验-实验三 类和对象
  18. html5试卷分数提交制作,如何制作一份高质量的试卷
  19. 椭圆型方程的有限差分法 matlab程序,椭圆型方程及有限差分法4.ppt
  20. MediaPipe KNIFT:基于模板的特征配准

热门文章

  1. CAD绘制导入wall并颗粒分组
  2. java 0xff00_ 0xFF 与 0xFF00 的作用
  3. android 进度条渐变方法
  4. matlab scope 设置,Simulink中示波器[scope]设置.pdf
  5. 广州中医药大学-天草药业联合实验室建设专家论证会顺利召开
  6. 利用 Redis 的 sorted set 做每周热评的功能
  7. 韦老师7天物联网课程----day5
  8. ftp连接时 不是私密连接_远程治疗似乎不那么私密时
  9. 谷粒商城P16人人开源登录没有反应
  10. 萧何月下追韩信时候,韩信对项羽的这个评价是否属实