1034. 有理数四则运算(20)
2015-10-29 18:06
197 查看
本题要求编写程序,计算2个有理数的和、差、积、商。
输入格式:
输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为0。
输出格式:
分别在4行中按照“有理数1 运算符 有理数2 = 结果”的格式顺序输出2个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式“k a/b”,其中k是整数部分,a/b是最简分数部分;若为负数,则须加括号;若除法分母为0,则输出“Inf”。题目保证正确的输出中没有超过整型范围的整数。
输入样例1:
输出样例1:
输入样例2:
输出样例2:
输入格式:
输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为0。
输出格式:
分别在4行中按照“有理数1 运算符 有理数2 = 结果”的格式顺序输出2个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式“k a/b”,其中k是整数部分,a/b是最简分数部分;若为负数,则须加括号;若除法分母为0,则输出“Inf”。题目保证正确的输出中没有超过整型范围的整数。
输入样例1:
2/3 -4/2
输出样例1:
2/3 + (-2) = (-1 1/3) 2/3 - (-2) = 2 2/3 2/3 * (-2) = (-1 1/3) 2/3 / (-2) = (-1/3)
输入样例2:
5/3 0/6
输出样例2:
1 2/3 + 0 = 1 2/3 1 2/3 - 0 = 1 2/3 1 2/3 * 0 = 0 1 2/3 / 0 = Inf -------------------------华丽的分割线----------------------- 分析:按照各种情况,能正确表示出分数就好。 代码:#include <stdio.h> long max_common_divisor(long a,long b); void shownumber(long a,long b); void add(long a1,long b1,long a2,long b2); void min(long a1,long b1,long a2,long b2); void mlt(long a1,long b1,long a2,long b2); void div(long a1,long b1,long a2,long b2); int main(void) { long a1,b1,a2,b2; scanf("%ld/%ld %ld/%ld",&a1,&b1,&a2,&b2); add(a1,b1,a2,b2); min(a1,b1,a2,b2); mlt(a1,b1,a2,b2); div(a1,b1,a2,b2); return 0; } long max_common_divisor(long a,long b) { long max,min,temp; max = a>b ? a : b; min = a<b ? a : b; temp = max % min; while(temp!=0) { max = min; min = temp; temp = max % min; } return min; } void shownumber(long a,long b) { long integer,maxcd,flag=0; if(a==0) { printf("0"); return; } if(a<0) { a = -a; flag=1; } maxcd = max_common_divisor(a,b); a /= maxcd; b /= maxcd; integer = a / b; if(flag == 0) { if(a%b == 0) printf("%ld",integer); else { if(a/b == 0) printf("%ld/%ld",a,b); else printf("%ld %ld/%ld",integer,a%b,b); } } else { if(a%b == 0) printf("(-%ld)",integer); else { if(a/b == 0) printf("(-%ld/%ld)",a,b); else printf("(-%ld %ld/%ld)",integer,a%b,b); } } } void add(long a1,long b1,long a2,long b2) { shownumber(a1,b1); printf(" + "); shownumber(a2,b2); printf(" = "); shownumber((a1*b2+a2*b1),b1*b2); printf("\n"); } void min(long a1,long b1,long a2,long b2) { shownumber(a1,b1); printf(" - "); shownumber(a2,b2); printf(" = "); shownumber((a1*b2-a2*b1),b1*b2); printf("\n"); } void mlt(long a1,long b1,long a2,long b2) { shownumber(a1,b1); printf(" * "); shownumber(a2,b2); printf(" = "); shownumber(a1*a2,b1*b2); printf("\n"); } void div(long a1,long b1,long a2,long b2) { shownumber(a1,b1); printf(" / "); shownumber(a2,b2); printf(" = "); if(a2 == 0) printf("Inf"); else { if(a2<0) { a2 = -a2; a1 = -a1; } shownumber(a1*b2,a2*b1); } printf("\n"); }
相关文章推荐
- 最近在写一个distributed cache,把设计思想分享一下
- 列表视图ListView之二
- multithreading--创建Thread线程的第一种方式
- servlet web.xml文件配置servlet-class可为jsp
- Oct 29th-jQuery的异步请求
- 我会说我喜欢创业嘛?(每个月总有几天会更新…………标题一定要长)
- 阿里云 redis性能测试
- PHP防盗链文件下载的基本思想
- 一定要记住的一些shell命令
- asp.net mvc 中使用 iframe 加载相应的静态html页面进行显示
- AE开发 入门教程
- 【软考之路】信息安全相关知识总结
- Flume安装部署(两台机器)
- Android Studio导入Eclipse项目
- 语文文法
- 专题 - Web应用->Web应用的最佳实践
- led子系统下应用层编程
- NSPredicate的学习
- mac平台下—手把手教你安装homebrew
- Eclipse使用Maven创建Web时错误:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webap