View Code of Problem 3494

#include<stdio.h>
#include<math.h> 
#include<stdlib.h>
struct fraction{
	int up,down;
}fen[3];
int gcb(int a,int b)
{
	if(b==0) return a;
	else
	return gcb(b,a%b);
}
fraction redution(fraction a)
{
	if(a.down<0)
	{
		a.down=-a.down;
		a.up=-a.up;
	}
	if(a.up==0)
	{
		a.down=1;
	}
	else 
	{
		int d=gcb(abs(a.down),abs(a.up));
		a.up/=d;
		a.down/=d;
	}
	return a;
}
fraction add(fraction a,fraction b)
{
	fraction result;
	result.up=a.up*b.down+a.down*b.up;
	result.down=a.down*b.down;
	return redution(result);
}
fraction minu(fraction a,fraction b)
{
	fraction result;
	result.up=a.up*b.down-a.down*b.up;
	result.down=a.down*b.down;
	return redution(result);
}
int main()
{
	int a,b,c,d;
	char o;
	while(scanf("%d/%d%c%d/%d",&a,&b,&o,&c,&d)!=EOF)
	{
		fraction result;
		fen[0].up=a;fen[0].down=b;
		fen[1].up=c;fen[1].down=d;
		if(o=='+')
		{
			result=add(fen[0],fen[1]);
		}
		if(o=='-')
		{
			result=minu(fen[0],fen[1]);
		}
		if(result.up!=0)
		{
			printf("%d/%d",result.up,result.down);
		}
		else
		{
			printf("0");
		}
	}
	
} 

Double click to view unformatted code.


Back to problem 3494