本题要求编写程序,计算两个有理数的和。
输入格式:
输入在一行中按照a1/b1 a2/b2
的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。
输出格式:
在一行中按照a/b
的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。
输入样例1:
1/3 1/6
输出样例1:
1/2
输入样例2:
4/3 2/3
输出样例2:
2
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include<stdio.h>
int gongbei(int a, int b)//求最小公倍数
{
int i = a > b ? a : b;
for (;; i++)
{
if (i % a == 0 && i % b == 0)return i;
}
return 0;
}
int gongyue(int a, int b)//求最小公约数
{
for (int i = 2; i <= a && i <= b; i++)
{
if (a % i == 0 && b % i == 0)return i;
}
return 0;
}
int main()
{
int a, b, c, d, sum, gongbe, gongyu, cheng1, cheng2;
scanf_s("%d/%d %d/%d", &a, &b,&c, &d);
if (b != d)//分母不同的话化作相同
{
gongbe = gongbei(b, d);
cheng1 = gongbe / b;
cheng2 = gongbe / d;
a *= cheng1;
c *= cheng2;
b = d = gongbe;
}
sum = a + c;
if (sum % b == 0)printf("%d", sum / b);//可以整除直接输出
else
{
gongyu = gongyue(sum, b);
if (gongyu != 0)printf("%d/%d", sum / gongyu, b / gongyu);//不是最简上下同除最小公约数
else printf("%d/%d", sum, b);//最简直接输出
}
return 0;
}