标签:最简 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