注意精度问题,最好对着judge的数据搞,不然很容易WA
#include<stdio.h>
#include<math.h>
static int gcd(int a, int b)
{
if (!a)
return b;
return gcd(b % a, a);
}
int main()
{
int m, n, cs = 0;
double eps = 1e-10;
while (scanf("%d %d", &m, &n) != EOF)
{
if (cs++)
putchar('\n');
if (m % n == 0)
{
printf("%d/%d\n", m / n, 1);
continue;
}
int i, g = gcd(m, n);
m = m / g;
n = n / g;
double temp, ip = 0, d = m * 1.0 / n;
double mind = 99999;
for (i = 1; i < n; i++)
{
temp = d * i;
modf(temp, &ip);
if (temp >= ip + 0.5)
ip += 1;
double dis = fabs(ip / i - d);
if (dis + eps < mind)
{
mind = dis;
printf("%d/%d\n", (int) ip, i);
}
}
printf("%d/%d\n", m, n);
}
return 0;
}