Java语言实现分数的加减乘除

Java:

import java.util.Scanner;class Fraction{    // 分数类public int molecule, denominator;   // 分子, 分母public Fraction() {molecule = 1;denominator = 1;}
}public class TestFive {private static Fraction a, b;   // 两个分数static Scanner sc = new Scanner(System.in);// 最大公约数方法public static int greatestCommonDivisor(int a, int b) {     return (a % b == 0) ? b : greatestCommonDivisor(b, a%b); }// 最小公倍数public static int leastCommonMultiple(int a, int b) {return a*b/greatestCommonDivisor(a, b);}// 加法public static Fraction add(Fraction a, Fraction b) {Fraction result = new Fraction();               // 计算结果// 通分并计算int denleacommul = leastCommonMultiple(a.denominator, b.denominator);   // 两个分数的分母的最小公倍数int temp1 = denleacommul/a.denominator;         int temp2 = denleacommul/b.denominator;result.molecule = a.molecule*temp1 + b.molecule*temp2;        // 分子相加result.denominator = denleacommul;                            // 分母不变// 约分int moldengrecomdiv = greatestCommonDivisor(Math.abs(result.molecule), Math.abs(result.denominator));// 不考虑符号result.denominator /= moldengrecomdiv;result.molecule /= moldengrecomdiv;// 返回结果return result;}// 减法public static Fraction subtraction(Fraction a, Fraction b) {Fraction result = new Fraction();               // 计算结果// 通分并计算int denleacommul = leastCommonMultiple(a.denominator, b.denominator);   // 两个分数的分母的最小公倍数int temp1 = denleacommul/a.denominator;         int temp2 = denleacommul/b.denominator;result.molecule = a.molecule*temp1 - b.molecule*temp2;        // 分子相减result.denominator = denleacommul;                            // 分母不变// 约分int moldengrecomdiv = greatestCommonDivisor(Math.abs(result.molecule), Math.abs(result.denominator));// 不考虑符号result.denominator /= moldengrecomdiv;result.molecule /= moldengrecomdiv;// 返回结果return result;}// 乘法public static Fraction multiplication(Fraction a, Fraction b) {Fraction result = new Fraction();               // 计算结果// 计算result.molecule = a.molecule*b.molecule;result.denominator = a.denominator*b.denominator;// 约分int moldengrecomdiv = greatestCommonDivisor(Math.abs(result.molecule), Math.abs(result.denominator));// 不考虑符号result.denominator /= moldengrecomdiv;result.molecule /= moldengrecomdiv;// 返回结果return result;}// 除法public static Fraction division(Fraction a, Fraction b) {Fraction result = new Fraction();               // 计算结果// 计算result.molecule = a.molecule*b.denominator;result.denominator = a.denominator*b.molecule;if(result.denominator < 0) {                    // 分母不为负的result.molecule = -result.molecule;result.denominator = -result.denominator;}// 约分int moldengrecomdiv = greatestCommonDivisor(Math.abs(result.molecule), Math.abs(result.denominator));// 不考虑符号result.denominator /= moldengrecomdiv;result.molecule /= moldengrecomdiv;// 返回结果return result;}// 读取分子和分母public static void inputMolDen(Fraction a) {a.molecule = 0;a.denominator = 0;String inputfraction = sc.next();/*         *       boolean flag = true;          // 标记符号*     int count = -1;               // count为负是读分子,count为正时读分母*       for(int i = 0;i < inputfraction.length();i++) {*          if(inputfraction.charAt(i) == '-')        // 如果分数是负的, flag 标记为 false*               flag = false;*         else if(Character.isDigit(inputfraction.charAt(i)) && count < 0){*               if(count != -1) *                  a.molecule *= 10;*             count--;*               a.molecule += Integer.valueOf(String.valueOf(inputfraction.charAt(i)));*          }else if(inputfraction.charAt(i) == '/') {    // 分子读完, 变 count 为正, 读分母*             count = 1;                               *         }else if(count > 0){*                if(count != 1) *                   a.denominator *= 10;*              count++;*             a.denominator += Integer.valueOf(String.valueOf(inputfraction.charAt(i)));*           }*      }*      // 处理符号*        if(flag == false) *           a.molecule = -a.molecule;* *       以上注释代码也可以实现下面功能 */boolean flag = true;          // 标记符号int molstart = 0, molend = 0, i = 0;while(i < inputfraction.length()) {        // 找分子的开头if(Character.isDigit(inputfraction.charAt(i))){molstart = i;break;}i++;}for(i =0;i < inputfraction.length();i++) {if(inputfraction.charAt(i) == '-')        // 如果分数是负的, flag 标记为 falseflag = false;if(inputfraction.charAt(i) == '/') {molend = i;        // 分子的末尾 + 1break;}}a.molecule = Integer.parseInt(inputfraction.substring(molstart, molend));a.denominator = Integer.parseInt(inputfraction.substring(molend+1, inputfraction.length()));// 处理符号if(flag == false) a.molecule = -a.molecule;}// 分数字符串public static String stringFraction(Fraction a) {if(a.denominator == 1)     // 分母为 1return String.valueOf((a.molecule));elsereturn (a.molecule + "/" + a.denominator);}public static void main(String[] args){try {a = new Fraction();System.out.print("a = ");inputMolDen(a);     // 输入 ab = new Fraction();System.out.print("b = ");inputMolDen(b);     // 输入 bSystem.out.println("a+b = " + stringFraction(add(a, b)));System.out.println("a-b = " + stringFraction(subtraction(a, b)));System.out.println("a*b = " + stringFraction(multiplication(a, b)));System.out.println("a/b = " + stringFraction(division(a, b)));}catch(ArithmeticException e) {System.out.println("分母出现零");}}}
/* Code Running Results
a = 1/3
b = -1/2
a+b = -1/6
a-b = 5/6
a*b = -1/6
a/b = -2/3
*/

Java语言实现分数的加减乘除相关推荐

  1. 运动会分数统计 java语言

    运动会分数统计java语言 运动会分数统计* 设计内容: 参加运动会有n个学校,学校编号为1--n.比赛分成m个男子项目,和w个女子项目.项目编号为男子1--m,女子m叶+1--m+w.不同的项目取前 ...

  2. Java编程语言学习:Java语言基础案例(如求两门课分数之差、三门课平均分、关系运算符作比较)之详细攻略

    Java编程语言学习:Java语言基础案例(如求两门课分数之差.三门课平均分.关系运算符作比较)之详细攻略 目录 Java语言基础案例 1.求两门课分数之差.三门课平均分: 2.关系运算符作比较

  3. 【C++】【Java】分别使用C++、Java语言实现将小数转换成分数形式

    C++语言实现 //============================================================================ // @FileName ...

  4. 大数高精加减乘除(洛谷P1601、P2142、P1303、P1480题题解,Java语言描述)

    写在前面 算法归算法,有现成的API能用为什么不用? (纯算法党别喷我,以后我再写高精算法的文) P1601 → A+B Problem 题目要求 P1601题目链接 AC代码(Java语言描述) i ...

  5. 两分数相乘后约分的Cantor表(洛谷P1482题题解,Java语言描述)

    题目要求 P1482题目链接 分析 据说本题是这题的升级版-- → P1014题题解 升级的地方其实就是相乘之后约分. 约分需要求解最大公约数,gcd()是吧-- 但我这里偏偏懒得写gcd,就想用Ja ...

  6. 【c】分数类型的定义 c语言分数类型加减乘除的实现

    12 14日修改:该代码对于分数的判断不够完整存在一定的 防御性编程问题 事后加以修改 修改后的代码 请查看 分数类型加减乘除的实现 思路: 1.初始化 2.分数的显示 3.分数化简 4.加减乘除实现 ...

  7. 2,Java语言基础-Java语言基本程序设计知识

    Java语言基础 Java语言基本程序设计知识 1,JavaAPI概述 1.1,什么是API API是指应用程序接口( Application Program Interface, API),故名思意 ...

  8. 2018年10月自考java_请注意!2018年自考《Java语言程序设计(一)》课程全国统一命题考试...

    为组织好高等教育自学考试<Java语言程序设计(一)>课程的全国统一考试命题工作,根据全国统一命题课程的有关规定,特制定本说明. 一.考试原则 1.考试标准 本课程考试参照全日制普通高校同 ...

  9. Java语言特性运用:各种Java语法特性是怎样被Spring各种版本巧妙运用的?

    Java语法变化 Java5(2004): 枚举.泛型.注解.封箱(解箱)- Java6(2006): @Override接口 Java7(2011): Diamond语法.多Catch.Try- J ...

最新文章

  1. 台湾澎湖县启动返乡包机 春节疏运增加25个航班
  2. grails 转为java_创建一个grails项目,然后转成maven项目
  3. 【c_prime_plus】第十七章笔记
  4. 我是如何学习写一个操作系统(七):进程的同步与信号量
  5. 分享:Fedora 删除旧内核
  6. CLRS2e读书笔记—Chapter10
  7. Django搭建个人博客:改写View视图
  8. Linux安装gcc编译环境出错
  9. MDT实现windows系统批量部署
  10. opencv学习笔记(三)颜色转换 cvtColor
  11. activex与matlab,基于ActiveX技术的LabVIEW与MATLAB混合编程总结
  12. 不同速度流体的剪切形成不同尺度的漩涡,看起来很像分形。
  13. 山东大学为什么火了_比校花更诱人,山东大学因为它,火了!
  14. 华为二面 招行信用卡中心终面面经
  15. DB2数据库的基础学习
  16. JAVA处理Excel的三种实现方式(二)
  17. HTTP协议详解由浅入深看HTTP
  18. 面向对象语言(JAVA)——工具类(Collections(操作集合)代码实现理解)
  19. MATLAB r2020b完整工具箱列表和中文翻译
  20. 总目录- AutoSAR BSW高阶配置【持续更新中...】

热门文章

  1. 2021下半年浙江事业单位统考内容汇总
  2. 3-35 声明银行账户类Account,成员变量包括账号、储户姓名、开户时间、身份证号码、存款余额等账户信息,成员方法包括开展户、存款、取款、查询(余额、明细)、销户等操作。
  3. 华为与中国工商银行携手在数字人民币应用场景创新,率先支持数字人民币穿戴支付
  4. 格力底气足,逆势招工5000人,暗讽对手数年前裁员过半渡难关
  5. 萌宠大作战服务器维护,萌宠大作战
  6. 自己封装的爱普生机器人与三菱的MC协议通信驱动程序,提供项目源码
  7. 模型先生西蒙斯——世界上最赚钱的数学家
  8. 4、python分析酷我音乐
  9. 领先实践|全球最大红酒App如何用设计冲刺创新vivino模式
  10. coloros7没有推送_OPPO Reno Ace ColorOS 7版本限量尝鲜开启申请