码迷,mamicode.com
首页 > 其他好文 > 详细

分数求和

时间:2018-11-22 15:19:12      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:最简   stdio.h   main   公约数   lse   div   需要   结果   mat   

描述

输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为1,则直接用整数表示。

如:5/6、10/3均是最简形式,而3/6需要化简为1/2, 3/1需要化简为3。

分子和分母均不为0,也不为负数。

输入第一行是一个整数n,表示分数个数,1 <= n <= 10;
接下来n行,每行一个分数,用"p/q"的形式表示,不含空格,p,q均不超过10。输出输出只有一行,即最终结果的最简形式。若为分数,用"p/q"的形式表示。样例输入

2
1/2
1/3

样例输出

5/6
#include<stdio.h>
int main() 
{
	int a,b,c=0,d=1,n;
	scanf("%d",&n);
	while(n--)
	{	
		scanf("%d/%d",&a,&b);
		c=a*d+c*b;
		d*=b;
 	}
       a=c;
       b=d;
	   
     while(a!=b)
    { 
        a>b?a=a-b:b=b-a;
    }
      c/=a;
      d/=a;
      
    if(d!=1)
         printf("%d/%d",c,d);
    else 
         printf("%d",c);
}

 

样例输入

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;
}

  

分数求和

标签:最简   stdio.h   main   公约数   lse   div   需要   结果   mat   

原文地址:https://www.cnblogs.com/fangzheng-nie/p/10001017.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!