输⼊格式:
输⼊在⼀⾏中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分⼦和分⺟全是整型范围内的整数,负号只可能出现在分⼦前,分⺟不为0。
输出格式:
分别在4⾏中按照“有理数1 运算符 有理数2 = 结果”的格式顺序输出2个有理数的和、差、积、商。注意 输出的每个有理数必须是该有理数的最简形式“k a/b”,其中k是整数部分,a/b是最简分数部分;若为负数,则须加括号;若除法分⺟为0,则输出“Inf”。题⽬保证正确的输出中没有超过整型范围的整数。
输⼊样例1:
1 | 2/3 -4/2 |
输出样例1:
1 | 2/3 + (-2) = (-1 1/3) |
输入样例2:
1 | 5/3 0/6 |
输出样例2:
1 | 1 2/3 + 0 = 1 2/3 |
分析:func(m, n)的作⽤是对m/n的分数进⾏化简,gcd(t1, t2)的作⽤是计算t1和t2的最⼤公约数~在 func函数中,先看m和n⾥⾯是否有0(即m*n是否等于0),如果分⺟n=0,输出Inf,如果分⼦m=0,输 出”0″~flag表示m和n是否异号,flag=true表示后⾯要添加负号”(-“和括号”)”,再将m和n都转为abs(m) 和abs(n),即取他们的正数部分⽅便计算~x = m/n为m和n的可提取的整数部分,先根据flag的结果判 断是否要在前⾯追加”(-“,然后根据x是否等于0判断要不要输出这个整数位,接着根据m%n是否等于0 的结果判断后⾯还有没有⼩分数,如果m能被n整除,表示没有后⾯的⼩分数,那么就根据flag的结果 判断要不要加”)”,然后直接return~如果有整数位,且后⾯有⼩分数,则要先输出⼀个空格,接着处 理剩下的⼩分数,先把m分⼦减去已经提取出的整数部分,然后求m和n的最⼤公约数t,让m和n都除以t进⾏化简~最后输出“m/n”,如果flag==true还要在末尾输出”)”
1 | #include <iostream> |
看完之后想说,这就是大佬吗,我也跟着做了一下,发现进行计算的时候太麻烦,完全没有想到a*c-b*d
这类高中的知识点。