题目描述
现代数学的著名证明之一是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);
}
}