#include <iostream>
#include <cstdio>
#include <string>
#include <cmath>
using namespace std;
//求最大公约数
int gcd(int n, int m)
{
int tmp;
if (n < m){
tmp = m;
m = n;
n = tmp;
}
while (n%m){
tmp = m;
m = n % m;
n = tmp;
}
return m;
}
//求最小公倍数
int lcm(int a, int b)
{
int tmp;
tmp = gcd(a, b);
return ((a / tmp) * (b / tmp) * tmp);
}
int main()
{
int a, b, c, d, ans, tmp;
string str;
char s;
while (cin >> str){
a = str[0] - 48;
b = str[2] - 48;
s = str[3];
c = str[4] - 48;
d = str[6] - 48;
//不相等的情况要先通分
if (b != d){
tmp = lcm(b, d);
a = tmp / b * a;
c = tmp / d * c;
b = d = tmp;
}
if (s == '+'){
ans = a + c;
}
else if (s == '-'){
ans = a - c;
}
if (ans == 0)
cout << 0 << endl;
else{
tmp = gcd(abs(float (ans)), b);
ans /= tmp;
b /= tmp;
//考虑分子大于分母或整除的情况
if (abs(float(ans)) >= b){
if (ans % b == 0){
ans = ans / b;
cout << ans << endl;
}
else{
tmp = ans / b;
ans = ans - tmp * b;
cout << tmp << ans << "/" << b << endl;
}
}
else
cout << ans << "/" << b << endl;
}
}
system("pause");
}
/*
1/8+3/8
1/4-1/2
1/3-1/3
4/2+8/2
4/2-8/2
*/
poj 3979 分数加减法
最新推荐文章于 2021-05-20 20:15:38 发布