6-3 分数计算 (10 分)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44547670/article/details/102755753

6-3 分数计算 (10 分)

该题目实现了分数的表示,分数的加法和乘法。该题目的输入不需要考虑输入分母为“0”。注意,例如当输入是分子是4,分母是8的时候,分数应该是1/2,而不是4/8.

方法定义:

请仔细阅读测试样例中的调用

裁判测试程序样例:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Fraction a = new Fraction(in.nextInt(), in.nextInt());
        Fraction b = new Fraction(in.nextInt(),in.nextInt());
        a.print();
        b.print();
        a.plus(b).print();
        a.multiply(b).print();
        in.close();
    }
}

/* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:

1 2 3 4

输出样例:

在这里给出相应的输出。例如:

1/2 3/4 5/4 3/8

解答

class Fraction {
	private int mol;
	private int den;
	private int sum_mol;
	private int sum_den;
	private int pdt_mol;
	private int pdt_den;

	Fraction(int mol, int den) {
		this.mol = mol;
		this.den = den;
	}

	public void print() {
		//为了约分
		int flag;
		do {
			flag = 0;
			for (int i = 2; i <= mol && i <= den; ++i) {
				if (mol % i == 0 && den % i == 0) {
					mol = mol / i;
					den = den / i;
					flag = 1;
				}
			}
		} while (flag != 0);
		System.out.print(mol + "/" + den + " ");
	}

	public Fraction plus(Fraction x) {
	//定义新的量是防止den,mol在第一次加法计算中值发生变化,影响乘法的运算
		int sumden = this.sum_den;
		int summol = this.sum_mol;
		int td = this.den;
		int tm = this.mol;
		int xd = x.den;
		int xm = x.mol;
		
		//寻找最大公倍数(分母)
		sumden = td;
		for (; ; sumden++) {
			if (sumden % td == 0 && sumden % xd == 0) {
				break;
			}
		}
		tm *= (sumden / td);
		xm *= (sumden / xd);
		summol = tm + xm;
		Fraction c = new Fraction(summol, sumden);
		return c;
	}
	public Fraction multiply(Fraction y) {
		int pdtden = this.pdt_den;
		int pdtmol = this.pdt_mol;
		int td = this.den;
		int tm = this.mol;
		int yd = y.den;
		int ym = y.mol;
		pdtden = td * yd;
		pdtmol = tm * ym;
		Fraction d = new Fraction(pdtmol, pdtden);
		return d;
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_44547670/article/details/102755753