天天看點

分數加減法(POJ3979)

分數加減法

Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 12564 Accepted: 4194

Description

編寫一個C程式,實作兩個分數的加減法

Input

輸入包含多行資料 

每行資料是一個字元串,格式是"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

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int gcd(int a,int b)
{
  return b==0?a:gcd(b,a%b);
}
int main()
{
  int a,b,c,d,x,y,sum,k,t;
  char s;
  while(scanf("%d/%d%c%d/%d",&a,&b,&s,&c,&d)!=EOF)
  {
    if(s=='+')
    {
      x=a*d+b*c;
      y=b*d;
      k=x/gcd(x,y);
      t=y/gcd(x,y);
      if(t==1)
      printf("%d\n",k);
      else
      {
        printf("%d/%d\n",k,t);
      }
    }
    else
    {
      x=a*d-b*c;
      y=b*d;
      if(x==0)
      printf("0\n");
      else{
      k=x/gcd(x,y);
      t=y/gcd(x,y);
      if(t==1)
      printf("%d\n",k);
      else
      {
        if(x>0)
        printf("%d/%d\n",k,t);
        else
        printf("%d/%d\n",k*-1,t*-1);}
      }
    }
  }
  return 0;
}