分数求和
Posted fangzheng-nie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分数求和相关的知识,希望对你有一定的参考价值。
描述
输入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 "); } else { if(zi%mu==0) { printf("%d ",zi/mu); } else { he=func(zi,mu); zi=zi/he; mu=mu/he; printf("%d/%d ",zi,mu); } } } else printf("0 "); } return 0; }
以上是关于分数求和的主要内容,如果未能解决你的问题,请参考以下文章