Java 两个分式相加的运算

class Main{
    public static void main(String[] args){
        
        
        System.out.println(culculateMinLength("1/5+2/3"));   
    }
    
    
    public static String culculateMinLength(String express){
        String s[] = express.split("\\+");   //对于‘+’号这里需要用\\转义 
        String fenShi1[] = s[0].split("/");
        String fenShi2[] = s[1].split("/");
        
        int fenZi1 = Integer.parseInt(fenShi1[0]);
        int fenMu1 = Integer.parseInt(fenShi1[1]);
        
        int fenZi2 = Integer.parseInt(fenShi2[0]);
        int fenMu2 = Integer.parseInt(fenShi2[1]);
        
        //计算分式
        int fenMuLcm = lcm(fenMu1, fenMu2);
        fenZi1 *= fenMuLcm/fenMu1;
        fenZi2 *= fenMuLcm/fenMu2;
        
        //化简分式
        int gcd = gcd(fenZi1+fenZi2, fenMuLcm);
        int resultFenZi = (fenZi1+fenZi2)/gcd;
        int resultFenMu = fenMuLcm/gcd;
        
        //组合结果分式
        String resultFenShi = resultFenZi + "/" + resultFenMu;
        
        return resultFenShi;
    }
    
    //最大公约数的写法 辗转相除法
    public static int gcd(int m,int n){
        int temp,r;
        //保证m比n大
        if(m<n){
            temp = m;
            m = n;
            n = temp;
        }
        //一直辗转相除 直到余数为0时取除数
        while(m%n!=0){
            r = m%n;
            m = n;
            n = r;
        }
        return n;
    }
    
    //最小公倍数 先计算出最大公约数就很容易解决了
    public static int lcm(int a,int b){
        return a*b/gcd(a, b);   //  gcd*a/gcd*b/gcd  如12和15的最小公倍数即3*4*5,3为它们的最大公约数
    }
}

今天在做CVTE的笔试时,碰到一道编程题,要求写一个方法:方法的输入为字符串(含两个分式的加法),方法返回一个字符串(分式相加的结果,最简分数)。

这道题目考察对字符串的操作(切割),还有对String类型和Integer类型的转换、自动拆箱,以及两个经典算法的实现(求最大公约数和最小公倍数)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,请稍等,我帮您查找一下相关代码: ```java public class Fraction { private int numerator; // 分子 private int denominator; // 分母 // 构造函数 public Fraction(int numerator, int denominator) { if (denominator == 0) { throw new IllegalArgumentException("分母不能为0!"); } else if (denominator < 0) { this.numerator = -numerator; this.denominator = -denominator; } else { this.numerator = numerator; this.denominator = denominator; } simplify(); } // 约分函数 private void simplify() { int gcd = gcd(numerator, denominator); numerator /= gcd; denominator /= gcd; } // 最大公约数函数 private int gcd(int p, int q) { if (q == 0) return p; int r = p % q; return gcd(q, r); } // 加法操作 public Fraction add(Fraction other) { int newNumerator = numerator * other.denominator + other.numerator * denominator; int newDenominator = denominator * other.denominator; return new Fraction(newNumerator, newDenominator); } // 减法操作 public Fraction subtract(Fraction other) { int newNumerator = numerator * other.denominator - other.numerator * denominator; int newDenominator = denominator * other.denominator; return new Fraction(newNumerator, newDenominator); } // 乘法操作 public Fraction multiply(Fraction other) { int newNumerator = numerator * other.numerator; int newDenominator = denominator * other.denominator; return new Fraction(newNumerator, newDenominator); } // 除法操作 public Fraction divide(Fraction other) { if (other.numerator == 0) { throw new IllegalArgumentException("除数不能为0!"); } int newNumerator = numerator * other.denominator; int newDenominator = denominator * other.numerator; return new Fraction(newNumerator, newDenominator); } // 打印分数 public void print() { System.out.println(numerator + "/" + denominator); } } ``` 以上就是使用 Java 实现的关于分式运算代码,包括加减乘除操作以及约分等功能。请您根据需要进行调用或修改。如有其它问题,请告诉我,我会尽力帮助您。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值