【Java】日常测试记录2-设计一个分数类

题目描述

设计一个分数类,完成以下功能:1、加减乘除运算;2、返回该分数的值(小数形式);3、求该分数的倒数(分数形式)。

注意: 输入不保证是最简分数,但输出要保证。测试用例保证分子,分母均不为0。

输入

只有一行,为4个用空格分隔的整数,依次代表分数a的分子、分母,分数b的分子、分母。

输出

共8行,依次为a,b,a+b,a-b,a*b,a/b,1/a,a(小数形式,保留1位小数)。具体格式见输出样例,如果结果为整数仍然按分数形式输出,此时分母为1,如果结果为负数,则只能在分子中出现负号

样例输入

7 8 5 6

样例输出

7/8
5/6
41/24
1/24
35/48
21/20
8/7
0.9
import java.util.Scanner;

class fen{
	int up,down;
	fen(int u,int p){
		up=u;
		down=p;
		simplification();
		eq();
	}
	
	public int getup(){
		return up;
	}

	public int getdown(){
		return down;
	}

	//最大公约数
	public int Gcd(int u,int d) {
		if (u%d==0){
			return d;
		}
		return Gcd(d,u%d);
	}

	//最简化
	void simplification(){
		int gcd =Gcd(up, down);
		up/=gcd;
		down/=gcd;
	}
	
	//符号调整
	void eq(){
		if(down<0) {
			down=0-down;
			up=0-up;
		}
	}
	
	//求和
	public fen add(fen Fb){
		int upp=(up*Fb.getdown())+(Fb.getup()*down);
		int doo=down*Fb.getdown();
		return new fen(upp, doo);
	}
	
	//差
	public fen sub(fen Fb){
		int upp=(up*Fb.getdown())-(Fb.getup()*down);
		int doo=down*Fb.getdown();
		return new fen(upp, doo);
	}

	//积
	public fen mul(fen Fb){
		int upp=(up*Fb.getup());
		int doo=down*Fb.getdown();
		return new fen(upp, doo);
	}
	
	//商
	public fen div(fen Fb){
		int upp=(up*Fb.getdown());
		int doo=down*Fb.getup();
		return new fen(upp, doo);
	}
	
	//倒
	void reci(){
		int upp=down;
		int doo=up;
		fen aa=new fen(upp, doo);
		aa.show();
	}
	
	//小数
	void tran(){
		float itself=(float)up/down;
		String itselff = String.format("%.1f",itself);
		System.out.println(itselff);	
	}	
	
	void show(){
		System.out.println(up+"/"+down);
	}
}

public class Main {
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		int x,y,z,zz;
		x=input.nextInt();
		y=input.nextInt();
		z=input.nextInt();
		zz=input.nextInt();
		fen a=new fen(x,y);
		fen b=new fen(z,zz);
		
		a.show();
		b.show();
		a.add(b).show();
		a.sub(b).show();
		a.mul(b).show();
		a.div(b).show();
		a.reci();
		a.tran();
	}
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值