分数

分数格式:a/b


输入:分子1:2

          分母1:4

          分子2:3

          分母2:9

输出:分数1化简结果:1/2

          分数1 + 分数2 = 5/6

          分数1 * 分数2 = 1/6


public class Main {

	static Fen huajian(Fen f) {// 分数化简
		// 如果分母为负数,令分子和分母都变为相反数
		if (f.down < 0) {
			f.up = -f.down;
			f.down = -f.down;
		}
		// 如果分子为0,令分母为1
		if (f.up == 0) {
			f.down = 1;
		} else {
			int d = fun(Math.abs(f.up), Math.abs(f.down));// 分子分母的最大公约数
			f.up /= d;// 约去最大公约数
			f.down /= d;
		}
		return f;
	}

	static int fun(int a, int b) {// 求a和b的最大公约数
		if (b == 0)
			return a;
		else
			return fun(b, a % b);
	}

	static Fen add(Fen a, Fen b) {// 加法(减法就是把加号换成减号)
		Fen f = new Fen();
		f.up = a.up * b.down + b.up * a.down;
		f.down = a.down * b.down;
		f = huajian(f);
		return f;
	}

	static Fen multi(Fen a, Fen b) {// 乘法(除法就是把b颠倒再做乘法)
		Fen f = new Fen();
		f.up = a.up * b.up;
		f.down = a.down * b.down;
		f = huajian(f);
		return f;
	}

	static void show(Fen f) {// 输出分数的正确格式
		f = huajian(f);
		if (f.down == 1)// 整数
			System.out.println(f.up);
		else if (Math.abs(f.up) > f.down) {// 假分数
			System.out.println(f.up / f.down + " " + Math.abs(f.up) % f.down + "/" + f.down);
		} else {// 真分数
			System.out.println(f.up + "/" + f.down);
		}
	}

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		Fen f1 = new Fen();
		// 分数1
		System.out.print("分子1:");
		f1.up = in.nextInt();
		System.out.print("分母1:");
		f1.down = in.nextInt();
		// 分数2
		Fen f2 = new Fen();
		System.out.print("分子2:");
		f2.up = in.nextInt();
		System.out.print("分母2:");
		f2.down = in.nextInt();
		if (f1.down == 0 || f2.down == 0) {// 分母不能为0
			System.out.println("Wrong!");
			return;
		}
		Fen f3 = new Fen();
		// 化简
		System.out.print("分数1化简结果:");
		show(f1);
		// 相加
		System.out.print("分数1 + 分数2 = ");
		show(add(f1, f2));
		// 相乘
		System.out.print("分数1 * 分数2 = ");
		show(multi(f1, f2));
	}

}

class Fen {
	int up;// 分子
	int down;// 分母
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值