思路:首先对输入字符串进行转换,取出对应各分子分母a、b、c、d,根据操作符是+或者-计算得到
通分之后的分子分母(分子:a * d +/- c * b 分母:b * d)。对分子分母求得最大公约数,用分
子分母分别除以最大公约数,得到约分后的分子分母,即可输出。
#include
#include
using namespace std;
//辗转相除法求最大公约数
int mod(int sum, int mul)
{
int max_, min_, mod_ = 1;
if(sum > mul)
{
max_ = sum;
min_ = mul;
}
else
{
max_ = mul;
min_ = sum;
}
while(mod_ = max_ % min_)
{
max_ = min_;
min_ = mod_;
}
return min_;
}
//输入字符串转换成对应分数并求和或差
void ch(char* str)
{
//取出对应的分子分母以及操作符
char ac = str[0], bc = str[2], cc = str[4], dc = str[6];
char oper = str[3];
//将分子分母转化为整数
int a = (int)ac - 48;
int b = (int)bc - 48;
int c = (int)cc - 48;
int d = (int)dc - 48;
int sum, mul; //sum:通分后的分子 mul:通分后的分母
mul = b * d;
//根据操作符处理和或差
if('+' == oper)
sum = a * d + c * b;
else
sum = a * d - c * b;
//求出最大公约数并约分
if(0 == sum)
cout << sum << endl;
else
{
int mod_ = mod(abs(sum), mul);
cout << sum / mod_ << "/" << mul / mod_ << endl;
}
}
int main()
{
char str[8];
while(cin >> str)
ch(str);
return 0;
}