111-分数加减法
内存限制:64MB
时间限制:1000ms
特判: No
通过数:20
提交数:54
难度:2
题目描述:
编写一个C程序,实现两个分数的加减法
输入描述:
输入包含多行数据 每行数据是一个字符串,格式是"a/boc/d"。 其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。 数据以EOF结束 输入数据保证合法
输出描述:
对于输入数据的每一行输出两个分数的运算结果。 注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
样例输入:
1/8+3/8 1/4-1/2 1/3-1/3
样例输出:
1/2 -1/4 0
C/C++ AC:
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <cmath> 6 #include <stack> 7 #include <set> 8 #include <map> 9 #include <queue> 10 #include <climits> 11 12 using namespace std; 13 14 int gcd(int a, int b) 15 { 16 if (a < 0) a = -a; 17 if (b < 0) b = -b; 18 if (b == 0) return a; 19 return gcd(b, a%b); 20 } 21 22 int main() 23 { 24 int a, b, c, d, e, f; 25 char ch; 26 while (~scanf("%d/%d%c%d/%d", &a, &b, &ch, &c, &d)) 27 { 28 if (b == d) 29 { 30 f = b; 31 switch (ch) 32 { 33 case '+': 34 e = a + c; break; 35 default: 36 e = a - c; 37 } 38 int temp = gcd(e, f); 39 e /= temp, f /= temp; 40 if (e == 0) // 特殊判断1,分子为0 41 printf("0 "); 42 else if (f == 1) // 特殊判断2,分母为1 43 printf("%d ", e); 44 else 45 printf("%d/%d ", e, f); 46 } 47 else 48 { 49 f = b * d; 50 switch (ch) 51 { 52 case '+': 53 e = a * d + c * b; break; 54 default: 55 e = a * d - c * b; 56 } 57 int temp = gcd(e, f); 58 e /= temp, f /= temp; 59 if (e == 0) 60 printf("0 "); 61 else if (f == 1) 62 printf("%d ", e); 63 else 64 printf("%d/%d ", e, f); 65 } 66 } 67 }