java P1482 Cantor表(升级版)

题目描述
现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:

1/1 1/2 1/3 1/4 1/5 …

2/1 2/2 2/3 2/4 …

3/1 3/2 3/3 …

4/1 4/2 …

5/1 …

… 这次与NOIp1999第一题不同的是:这次需输入两个分数(不一定是最简分数),算出这两个分数的积(注意该约分的要约分)后输出积在原表的第几列第几行(若积是整数或1/积,则以“积/1”或“1/积”结算)。

输入格式
共两行。每行输入一个分数(不一定是最简分数)。

输出格式
两个整数,表示输入的两个分数的积在表中的第几列第几行,注意该约分的要约分。

输入输出样例

输入 #1

4/5
5/4

输出 #1

1 1

我觉得写复杂了。。。。。

import java.util.*;

public class Main {

	public static void main(String[] args) {

		new Main().sf();
	}

	int n = 0;
	String s = new String();
	String ss = new String();
	String[] b = new String[] {};
	String[] a = new String[] {};
	int x = 0, y = 0, z = 0, t = 0;
	int e = 0, f = 0;

	public void sf() {

		Scanner in = new Scanner(System.in);

		s = in.next().trim();
		a = s.split("/");
		ss = in.next().trim();
		b = ss.split("/");

		for (int i = a[0].length() - 1; i >= 0; i--) {
			x = x * 10 + a[0].charAt(a[0].length() - i - 1) - '0';
		}
		for (int i = a[1].length() - 1; i >= 0; i--) {
			y = y * 10 + a[1].charAt(a[1].length() - i - 1) - '0';
		}
		for (int i = b[0].length() - 1; i >= 0; i--) {
			z = z * 10 + b[0].charAt(b[0].length() - i - 1) - '0';
		}
		for (int i = b[1].length() - 1; i >= 0; i--) {
			t = t * 10 + b[1].charAt(b[1].length() - i - 1) - '0';
		}

		x *= z;
		y *= t;
		f = name(x, y);
		x /= f;
		y /= f;

		System.out.println(y + " " + x);

	}

	public int name(int x1, int y1) {
		int x = Math.max(x1, y1);
		int y = Math.min(x1, y1);
		return x % y == 0 ? y : name(y, x % y);
	}

}
发布了87 篇原创文章 · 获赞 27 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_43457125/article/details/104706473
今日推荐