题目描述
现代数学的著名证明之一是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
样例输入 #1
4/5
5/4
样例输出 #1
1 1
提示
所有数据:两个分数的分母和分子均小于10000
解题思路:
求出两个分数的乘积,然后约分
采用gcd(x, y)
求最大公约数即可
最后根据分母和分子输出列数和行数
AC代码如下
#include <iostream>
using namespace std;
int gcd(int x, int y) {
int t;
while (y != 0) {
t = x % y;
x = y;
y = t;
}
return x;
}
int main() {
char c;
int n1, n2, n3, n4;
cin >> n1 >> c >> n2;
cin >> n3 >> c >> n4;
int ret = gcd(n1 * n3, n2 * n4);
int son = (n1 * n3) / ret, mother = (n2 * n4) / ret;
cout << mother << ' ' << son << endl;
return 0;
}