poj 3979 分数加减法
2016-08-22 19:47
218 查看
分数加减法
Description
编写一个C程序,实现两个分数的加减法
Input
输入包含多行数据
每行数据是一个字符串,格式是"a/boc/d"。
其中a,b,c,d是一个0-9的整数。o是运算符"+"或者"-"。
数据以EOF结束
输入数据保证合法
Output
对于输入数据的每一行输出两个分数的运算结果。
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
SampleInput
SampleOutput
TimeLimit:1000MS | MemoryLimit:65536K | |
TotalSubmissions:13666 | Accepted:4594 |
编写一个C程序,实现两个分数的加减法
Input
输入包含多行数据
每行数据是一个字符串,格式是"a/boc/d"。
其中a,b,c,d是一个0-9的整数。o是运算符"+"或者"-"。
数据以EOF结束
输入数据保证合法
Output
对于输入数据的每一行输出两个分数的运算结果。
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
SampleInput
1/8+3/8 1/4-1/2 1/3-1/3
SampleOutput
1/2 -1/4 0 分析:先通分再约分,即求出两个分母的最小公倍数,求分子分母的最大公约数来约分, 最终结果可能是0,那么直接输出0; 可能是整数 可能是正数,也可能是负数;
#include<stdio.h> #include<math.h> intgcd(intx,inty){//辗转相除法求最大公约数,x>=y; if(x<y){ inttmp=x; x=y; y=tmp; } if(y==0) returnx; returngcd(y,x%y); } intmain(){ inta,b,c,d,_gcd,_lcm,numerator,_a,_c,_gcd1; charo; while(scanf("%d/%d%c%d/%d",&a,&b,&o,&c,&d)!=EOF){ _gcd=gcd(b,d); _lcm=b/_gcd*d;//两个分母的最小公倍数 _a=a*d/_gcd;//通分后第一个分式的分子 _c=c*b/_gcd;//通分后第二个分式的分子 //计算和式的分子值 if(o=='+') numerator=_a+_c; else numerator=_a-_c; //如果分子值为0,则直接输出 if(numerator==0) printf("%d\n",numerator); else{ _gcd1=gcd(abs(numerator),_lcm); //最大公约数和分母相同,说明分子和分母相同,最后的值为整数 if(_gcd1==_lcm) printf("%d\n",numerator/_gcd1); else printf("%d/%d\n",numerator/_gcd1,_lcm/_gcd1); } } return0; }
相关文章推荐
- poj3979 分数加减法
- 分数加减法 poj 3979
- (POJ 3979)分数加减法
- POJ 3979 分数加减法
- poj 3979 分数加减法
- poj 3979 分数加减法
- poj 3979 分数加减法
- POJ 3979 分数加减法(水题)
- POJ 3979 分数加减法(水~)
- POJ 3979 分数加减法
- poj 3979 分数加减法
- POJ-3979-分数加减法(分数运算)
- POJ 3979 分数加减法 中文
- POJ3979 分数加减法
- poj3979——分数化简
- pku--3979 分数加减法(注意分子为0,分母为1的情况)
- ACM: 水题 分数运算 poj 3979
- 3979 分数加减法
- NYOJ 111:分数加减法【水】
- NYOJ 111 分数加减法