Java实现分数的四则运算
题目描述
使用Java实现分数的四则运算,每行输入一次运算,只考虑两个分数之间的运算。
输入示例
输入
1/3 \ 5/8
输出
8/15
输入
2/3 + 4/3
2
算法思路
- 获得输入分数的分子分母和运算符
- 求出分母的最小公倍数,即求出分母的最大公约数
- 匹配运算规则
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《C语言四种方法求最大公约数》, 一起来围观吧
注意事项
- 参与运算的分数,分母不能为 0,需要对无效的分数进行处理
- 参与运算的分数,分子为 0 时,对于乘法而言,直接判定结果为 0;对于除法而言,除数为 0 时,直接判定结果为 0,被除数不能为 0(同样为无效的分数)
- 对于运算的结果,需要要进行化简;如果结果为正,省略 + 号,结果为负,输出第一位应该为 - 号
实现代码
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实现分数的四则运算相关推荐
- java有理数类的封装_第4章类与对象==有理数的类封装(分数的四则运算)
问题; 对分数进行四则运算,使结果仍然是分数 代码: Test.java public class Test { public static void main(String[]args){ Rati ...
- 《算法笔记》学习日记——5.2 最大公约数与最小公倍数5.3 分数的四则运算5.4 素数
目录 5.2 最大公约数与最小公倍数 问题 A: Least Common Multiple 小结 5.3 分数的四则运算 问题 A: 分数矩阵 小结 5.4 素数 问题 A: 素数 问题 B: Pr ...
- C++实现分数的四则运算
代码如下,需要的自取,给个赞就好. #include<iostream> #include<stdlib.h> #include<cstdio> using nam ...
- 分数的四则运算及化简(C语言实现)
下面这个程序使用C语言的结构体实现了分数的加减乘除四则运算,同时将结果最简化.这里为了简化,将输入值固定了,如果需要根据输入进行计算,将main函数内的相应部分稍作修改即可. #include < ...
- 用Java实现分数加减和乘法计算
用Java实现分数加法和乘法计算(新手) 直接上代码,分别手动输入两个分数的分子和分母 import java.util.Scanner; public class Main { public sta ...
- java实现分数四则运算
java分数四则运算 java实现简单的分数四则运算(大一小白,希望有大佬评论指正) package 作业; import java.util.Scanner; public class Fracti ...
- Java:一个分数类的简单设计
这个类对于分数提供化简和加减乘除四种操作,基于"不变"的设计原则,因此是线程安全的. 其中使用了几个算法: [1]Fraction simpler(Fraction f);//分数 ...
- java用栈处理四则运算_Java 用栈处理四则运算
import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Stack; imp ...
- python分数约分_python分数的四则运算
适用于初学着看看,没有很深入的知识与语法,大神可以越过. 代码 class Arithmetic(object): def __init__(self, p, q): self.p = p self. ...
最新文章
- 轻松学Pytorch – 行人检测Mask-RCNN模型训练与使用
- 服务器响应的生成:HTTP响应报头——HttpServletResponse接口的应用
- 博客作业05--查找
- GT Transceiver中的重要时钟及其关系(2)单个外部参考时钟使用模型
- 数据处理的两个基本问题05 - 零基础入门学习汇编语言42
- 40.4. SOCKS
- 【今日CV 视觉论文速览】 07 Dec 2018
- python接口自动化(四十四)- 公共模块configparser读取ini数据库、邮箱配置文件(单独说明)
- 高可用结合gfs2,,实现集群文件系统以及集群逻辑卷。
- Python使用日常
- php socket 超时设置
- ListView嵌套ListView优化
- WebSocket开发说明文档
- 心电信号越界怎么回事_一种心电信号处理方法
- oracle用nas还是本地存储,为什么大家都在用NAS网络存储?
- 彻底解决IE9 文本框无法输入文字,IE窗口闪烁问题(亲测)
- java 解析 json 索引对象_怎么获取json对象的属性和值
- 我每天都要打开的8个在线网站,很有用~
- Oracle笔记本(1102)
- c语言学生成绩管理系统设计分析,参阅:C语言学生成绩管理系统设计