有理数类练习

package com;
import java.util.Scanner;
public class Rational {
    private long num=0; //分子
    private long den=1; //分母
    /************Begin*****************/
    public Rational(long num,long den){//构造函数
        this.num = num;
        this.den = den;
    }
    public String add(Rational r2){
        long fenzi = num *r2.den+r2.num*den;
        //此时的num,den就是r1的值
        long fenmu =den*r2.den;
        for(int i = 2;i<fenzi;i++){
            if(fenzi%i==0&&fenmu%i==0){
                fenzi = fenzi/i;
                fenmu = fenmu/i;
            }
        }
        return fenzi+"/" +fenmu;//输出字符串格式
    }
    public String substract(Rational r2){
        long fenzi = num*r2.den-r2.num*den;
        long fenmu = den*r2.den;
        for(int i = 2;i<fenzi;i++){
            if(fenzi%i==0&&fenmu%i==0){
                fenzi = fenzi/i;
                fenmu = fenmu/i;
            }
        }
        return fenzi+"/" +fenmu;
    }
    public String multiply(Rational r2){
        long fenzi = num*r2.num;
        long fenmu = den*r2.den;
        for(int i = 2;i<fenzi;i++){
            if(fenzi%i==0&&fenmu%i==0){
                fenzi = fenzi/i;
                fenmu = fenmu/i;
            }
        }
        return fenzi+"/" +fenmu;
    }
    public String divide(Rational r2){
        long fenzi = num*r2.den;
        long fenmu = den*r2.num;
        for(int i = 2;i<fenzi;i++){
            if(fenzi%i==0&&fenmu%i==0){
                fenzi = fenzi/i;
                fenmu = fenmu/i;
            }
        }
        return fenzi+"/" +fenmu;
    }
    /**************End*****************/
}

package com;
import java.util.*;
public class Rational_Test {
    public static void main(String[] args){
        Rational r1,r2;
        Scanner scan=new Scanner(System.in);
        int num1,den1,num2,den2;
        num1=scan.nextInt();//使用scan()函数
        den1=scan.nextInt();
        num2=scan.nextInt();
        den2=scan.nextInt();
        r1=new Rational(num1,den1);//创建对象r1,
        //调用构造函数Rational(),先对r1进行初始化
        r2=new Rational(num2,den2);//创建对象r2.
        //对r2进行初始化
        // 此时r1,r2就可以调用Rational类中的所有方
        //法add(),substract(),multiply(),divide()
        System.out.println(r1.add(r2));//加
        System.out.println(r1.substract(r2));//减
        System.out.println(r1.multiply(r2));//乘
        System.out.println(r1.divide(r2));//除

    }
}

用辗转求余法来约分:

package bao;
import java.util.*;
public class Rational {
    private long fenzi =0;
    private long fenmu =0;
    public Rational(long fenzi,long fenmu){
       this.fenzi = fenzi;
       this.fenmu =fenmu;
    }
    //辗转求余数约分。
    ***public long gcd(long a,long b){
        if(a%b==0){
            return b;
        }
        return gcd(b,a%b);
    }***
    public String add(Rational r2){
        long fenzi1 = fenzi*r2.fenmu+fenmu*r2.fenzi;
        long fenmu1 = fenmu*r2.fenmu;
        long c =gcd(fenzi1,fenmu1);
        fenzi1 /=c;
        fenmu1/=c;
        return fenzi1 +"/"+fenmu1;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值