分数加减法(C语言)

题目描述

编写一个C程序,实现两个分数的加减法

输入

输入包含多行数据 每行数据是一个字符串,格式是"a/boc/d"。 其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。 数据以EOF结束 输入数据保证合法

输出

对于输入数据的每一行输出两个分数的运算结果。 注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数

样例输入

1/8+3/8
1/4-1/2
1/3-1/3

样例输出

1/2
-1/4
0
#include<stdio.h>
#include <math.h>
int func(int m,int n) //求最大公约数
{
	int tmp;
	m=abs(m);
	n=abs(n);
	if(m==n)
		return m;
	if(m<n)
	{
		tmp=m;
		m=n;
		n=tmp;
	}
	while(m%n!=0)
	{
		tmp=m;
		m=n;
		n=tmp%n;
	}
	return n;
}
int main()
{
	int a,b,c,d; //两个分数的分子和分母
	int he,mu,zi; //分母和分子
	char o;
	while(scanf("%d/%d%c%d/%d",&a,&b,&o,&c,&d)!=EOF)
	{
		he=func(b,d); //求最大公约数
		mu=b*d/he;
		if(o=='+')
			zi=a*(mu/b)+c*(mu/d);
		else
			zi=a*(mu/b)-c*(mu/d);
		if(zi!=0)
		{
			if(zi/mu==1)
			{
				printf("1\n");
			}
			else
			{
				if(zi%mu==0)
				{
					printf("%d\n",zi/mu);
				}
				else
				{
					he=func(zi,mu);
					zi=zi/he;
					mu=mu/he;
					printf("%d/%d\n",zi,mu);
				}
			}
		}
		else
			printf("0\n");
	}
	return 0;
}
发布了46 篇原创文章 · 获赞 39 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_42128813/article/details/81216421