您的位置:首页 > 其它

hrbust 1178 分数加减(模拟+数论gcd,lcm)

2014-06-26 12:31 295 查看
题意是要模拟分数加减。

注意一些判断的细节。

代码:

#include <stdio.h>

int gcd(int a, int b)
{
if(b == 0) return a;
return gcd(b, a % b);
}

int lcm(int a, int b)
{
int c = gcd(a, b);
return a * b / c;
}

int main()
{
int a, b, c, d;
char ch;
while (scanf("%d/%d%c%d/%d", &a, &b, &ch, &c, &d) != EOF)
{
int fenmu = lcm(b, d);
int fenzi;

if (ch == '+')
{
fenzi = a * (fenmu / b) + c * (fenmu / d);
}
else
{
fenzi = a * (fenmu / b) - c * (fenmu / d);
}
if (fenzi == 0)
{
printf("0\n");
}
else
{
int t = gcd(fenmu, fenzi);
fenmu /= t;
fenzi /= t;
if(fenmu < 0)
{
fenzi = -fenzi;
fenmu = -fenmu;
}
if(fenmu == 1)
printf("%d\n", fenzi);
else
printf("%d/%d\n", fenzi, fenmu);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: