一直到26号晚上才发现要用GCC编译器,我提交的都是G++编译的,好在改起来很容易。初赛题目实在是让人大跌眼睛。废话不多说了,开始第一题。
分数加减法
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 3612 | Accepted: 1159 |
Description
编写一个C程序,实现两个分数的加减法
Input
输入包含多行数据
每行数据是一个字符串,格式是"a/boc/d"。
其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。
数据以EOF结束
输入数据保证合法
每行数据是一个字符串,格式是"a/boc/d"。
其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。
数据以EOF结束
输入数据保证合法
Output
对于输入数据的每一行输出两个分数的运算结果。
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
Sample Input
1/8+3/8 1/4-1/2 1/3-1/3
Sample Output
1/2 -1/4 0
这个题目一开始忘记了分母是1的情况要特殊处理,WA了两次。
惊奇地发现GCC可以在中间定义变量也能编译过。
#include <stdio.h> int GetGCDRec(int n, int m) { if ( n > m ) { int tmp = n; n = m; m = tmp; } while ( n != 0 ) { m = m%n; int tmp = n; n = m; m = tmp; } return m; } int main() { int a, b, c, d; char ch[10]; while ( scanf( "%s", ch ) != EOF ) { a = ch[0]-'0'; b = ch[2]-'0'; c = ch[4]-'0'; d = ch[6]-'0'; int adbc = ( ch[3] == '+' )? a*d+b*c: a*d-b*c; int bd = b*d; int gcd; if ( adbc ==