poj 3979 分数加减法

分数加减法
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 12903   Accepted: 4333

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

1/2
-1/4
0

题并不是太难注意以下几点:
1、结果是0
2、结果是负数
3、结果是整数
4、结果是分数
#include<stdio.h>
#include<string.h>
#include<math.h>
int gongyue(int a,int b)//求最大公约数 
{
	int i,j,s;
	while(b)
	{
		s=a%b;
		a=b;
		b=s;
	}
	return a;
}
int main()
{
	int a,b,c,d,j,i,n,m,t,k,zi,mu;
	char s;
	while(scanf("%d/%d%c%d/%d",&a,&b,&s,&c,&d)!=EOF)
	{
	    n=b*d;
	    a=a*d;
	    c=c*b;
	    if(s=='+')
	    {
	        zi=a+c;
	        mu=n;
			m=gongyue(zi,mu);
			zi/=m;
			mu/=m;
			if(zi%mu==0)//当化简后是整数时 
			printf("%d\n",zi/mu);
			else//当化简后是分数时 
			printf("%d/%d\n",zi,mu);	
	    }
	    else if(s=='-')
	    {
	    	zi=a-c;
	        mu=n;
			m=abs(gongyue(zi,mu));
			zi/=m;
			mu/=m;
			if(zi==0)//当结果为0时 
			printf("0\n");
			else if(zi%mu==0)//当结果为整数时 
			printf("%d\n",zi/mu);
			else//当结果是分数时 
			printf("%d/%d\n",zi,mu);	
	    }
	}
	return 0;
}

  

你可能感兴趣的:(poj)