nyoj 分数加减法
2016-10-26 22:20
267 查看
[align=center]分数加减法[/align]
难度:2
描述 编写一个C程序,实现两个分数的加减法
输入输入包含多行数据
每行数据是一个字符串,格式是"a/boc/d"。
其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。
数据以EOF结束
输入数据保证合法输出对于输入数据的每一行输出两个分数的运算结果。
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数样例输入
样例输出
[align=left]
[/align]
[align=left]代码示例1:[/align]
[align=left]代码示例2:[/align]
[align=left]ps:方法1是之前问别人才会写的,方法二是后来水题时自己写的。主要是要多考虑特殊情况。。
[/align]
4000
难度:2
描述 编写一个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
[align=left]
[/align]
[align=left]代码示例1:[/align]
#include<stdio.h> #include<stdlib.h> #include<math.h> int main() { int a,b,c,d; char o; while(scanf("%d/%d%c%d/%d",&a,&b,&o,&c,&d)!=EOF) { int x,y,t,k; y=b*d; if(o=='+') x=a*d+b*c; else if(o=='-') x=a*d-b*c; k=x>y?x:y; for(int i=2;i<=sqrt(k);i++) { if(x%i==0&&y%i==0) { x/=i; y/=i; i=2; //对分数化简 } } if(x==0) printf("0\n"); else if(y==1) printf("%d\n",x); else printf("%d/%d\n",x,y); } return 0; }
[align=left]代码示例2:[/align]
#include<stdio.h> #include<stdlib.h> int gys(int a,int b) { int n; while(b) { n=a%b; a=b; b=n; } return a; } int main() { int a,b,c,d; char e; while(scanf("%d/%d%c%d/%d",&a,&b,&e,&c,&d)!=EOF) { int m,n,x; x=b*d; if(e=='+') m=a*d+b*c; else if(e=='-') m=a*d-b*c; if(b==0&&d!=0) printf("%d\n",c); else if(d==0&&b!=0) printf("%d\n",a); else { n=gys(abs(m),x); int f=x/n; if(m==0) printf("0\n"); else if(f==1) printf("%d\n",m/n); else printf("%d/%d\n",m/n,f); } } return 0; }
[align=left]ps:方法1是之前问别人才会写的,方法二是后来水题时自己写的。主要是要多考虑特殊情况。。
[/align]
4000