//传送门:http://poj.org/PRoblem?id=3979#include <queue>#include <functional>#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <stack>#include <vector>#include <set>#include <map>#include <string>#include <cmath>#include <cstdlib>#include <ctime>#include <assert.h>using namespace std;#define N 100005int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}int main(){ int a,b,c,d; char ch; while(~scanf("%d/%d%c%d/%d",&a,&b,&ch,&c,&d)){ //以固定格式输入,会比输入字符串更易处理 int e = b*d/gcd(b,d); // e 为通分后的分母 ,对应的a c都要变化 a*=d/gcd(b,d); c*=b/gcd(b,d); if(ch=='-') a-=c; else a+=c; int f=a/gcd(a,e); // 两个分式合并后,分子为a,分母为f , 分子分母再化简 e/=gcd(a,e); // 如果分子为0,直接输入0 if(f==0){ printf("0/n"); continue; } if(e<0){ //分母不能有负号 f*=-1; e*=-1; } printf("%d",f); if(e!=1) printf("/%d",e); //分母为1,则不输出 puts(""); } return 0;}
新闻热点
疑难解答