题目描述:
给了一个Cantor表,现在给你两个分数(不一定是最简形式),现在需要你求出这两个分数的积在Cantor表中的位置位于几列几行?
题解:
首先补充一个数学知识:分数的分母表示Cantor表上的行号,分子表示Cantor表上的列号。
其实就是一个gcd的问题,先不要去管他有没有整除或者化成最简,我们就直接相乘然后取分子分母gcd就完事儿了。
AC代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<stack>
using namespace std;
int gcd(int a,int b)
{
int z = b;
while(a % b != 0){
z = a % b;
a = b;
b = z;
}
return z;
}
int main()
{
int a1,b1,a2,b2;
scanf("%d/%d",&a1,&b1);//自定义输出格式
scanf("%d/%d",&a2,&b2);
int ans1 = a1 * a2,ans2 = b1 * b2;
int ans = gcd(ans1,ans2);
cout << ans2/ans << ' ' << ans1/ans << endl;
return 0;
}
注:这个题在G++里好像可以用_gcd()
函数直接写,但是C++里还是得手打gcd。