7-2367 有理数加法(20 分)
本题要求编写程序,计算两个有理数的和。
输入格式:
输入在一行中按照a1/b1 a2/b2
的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。
输出格式:
在一行中按照a/b
的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。
输入样例1:
1/3 1/6
输出样例1:
1/2
输入样例2:
4/3 2/3
输出样例2:
2
作者: 乔林
单位: 清华大学
时间限制: 400ms
内存限制: 64MB
代码长度限制: 16KB
#include <stdio.h>
int gcd(int, int);
struct fraction{
int a;
int b;
};
int main(void)
{
struct fraction f1, f2, f3;
int g;
scanf("%d/%d %d/%d", &f1.a, &f1.b, &f2.a, &f2.b);
f3.a = f1.a*f2.b + f2.a*f1.b;
f3.b = f1.b*f2.b;
g = gcd(f3.a, f3.b);
f3.a /= g;
f3.b /= g;
if (f3.b == 1)
printf("%d", f3.a);
else
printf("%d/%d", f3.a, f3.b);
return 0;
}
int gcd(int x, int y)
{
int r;
while (1)
{
r = x%y;
if (r == 0)
break;
x = y;
y = r;
}
return y;
}