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\n",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);
	}
}
posted @   洛沐辰  阅读(693)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示