40分
by 孑然成愁 @ 2019-04-22 12:48:08
```cpp
#include<iostream>
using namespace std;
int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
} //最大公约数
int main() {
int a1,a2,b1,b2;
char x;
cin >> a1 >> x >> b1;
cin >> a2 >> x >> b2;//x用来放中间的 / ,不用管它
int c1 = a1 * a2, c2 = b1 * b2;
cout << c2 / gcd(c1, c2) << " " << c1 / gcd(c1, c2);
//约分
return 0;
}
```
by 三生万物 @ 2019-04-22 16:27:10
这道题观察题目不难发现“第x行第y列”的分数就是x/y,而我们要求一堆分数乘起来的积在表中的位置,就直接把分子分母分别乘到一起,然后约分就好了
by 三生万物 @ 2019-04-22 16:29:50
约分转换一下就是分子分母分别的积除以他们的最大公约数,也就是gcd(分子之积,分母之积)。如果看不懂上面那个版本可以尝试一下下面这个
```cpp
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
```
可以上网查一下“辗转相除法”。。
by 三生万物 @ 2019-04-22 16:34:04
那我为啥错
```cpp
#include<cstdio>
int gcd(int m,int n)
{
int gcd;
for(int i=m- 1;;i--)
{
if(m%i==0 && n%i==0)
{
gcd=i;
break;
}
}
return gcd;
}
void red(int m,int n)
{
int g=gcd(m,n);
m/=g;
n/=g;
}
int col(int m,int n,int p,int q)
{
int x;
int y;
x=m*p;
y=n*q;
red(x,y);
return x;
}
int row(int m,int n,int p,int q)
{
int x;
int y;
x=m*p;
y=n*q;
red(x,y);
return y;
}
int main()
{
int m,n,p,q;
scanf("%d/%d\n%d/%d",&m,&n,&p,&q);
int f=col(m,n,p,q);
int g=row(m,n,p,q);
printf("%d %d",f,g);
}
```
by syanoeclipse @ 2019-07-02 12:34:53
鸭蛋
by syanoeclipse @ 2019-07-02 12:35:16