Java练习 SDUT-2253_分数加减法

分数加减法

Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description

编写一个C程序,实现两个分数的加减法

Input

输入包含多行数据
每行数据是一个字符串,格式是"a/boc/d"。

其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。

数据以EOF结束
输入数据保证合法

Output

对于输入数据的每一行输出两个分数的运算结果。
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数

Sample Input

1/8+3/8
1/4-1/2
1/3-1/3

Sample Output

1/2
-1/4
0

题解:同分计算分数的结果然后找分子分母的最大公因子约分化简。注意分子为0以及分子是分母的倍数的时候。

import java.util.*;

public class Main
{
	public static void main(String[] args)
	{
		Scanner cin = new Scanner(System.in);
		String s;
		node a = new node();
		while(cin.hasNextLine())
		{
			s = cin.nextLine();
			a.ji(s);
		}
		cin.close();
	}
}

class node
{
	int a,b,c,d;
	void get(String s)
	{
		a = s.charAt(0) - '0';
		b = s.charAt(2) - '0';
		c = s.charAt(4) - '0';
		d = s.charAt(6) - '0';
	}
	void ji(String s)
	{
		int q,w,e;
		get(s);
		if(s.charAt(3)=='-')
		{
			w = b * d;
			q = a * d - c * b;
		}
		else
		{
			w = b * d;
			q = a * d + c * b;
		}
		if(q==0)
			System.out.println(0);
		else
		{
			e = gcd(w,q);
			if(w/e==1)
				System.out.println(q/e);
			else
				System.out.printf("%d/%d
",q/e,w/e);
		}
	}
	int gcd(int a,int b)
	{
		if(a<0)
			a = -a;
		if(b<0)
			b = -b;
		return b==0?a:gcd(b,a%b);
	}
}
原文地址:https://www.cnblogs.com/luoxiaoyi/p/9870007.html