1034. 有理数四则运算
来源:互联网 发布:微博淘宝优惠券安全吗 编辑:程序博客网 时间:2024/05/16 00:58
本题要求编写程序,计算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/32/3 * (-2) = (-1 1/3)2/3 / (-2) = (-1/3)输入样例2:
5/3 0/6输出样例2:
1 2/3 + 0 = 1 2/31 2/3 - 0 = 1 2/31 2/3 * 0 = 01 2/3 / 0 = Inf算法:
- 算法开始。
- 分别读取四个数字。
- 进行加减乘除运算,得到结果。
- 将假分数化简为最简带分数,将真分数化为最简真分数。
- 输出加减乘除四个运算。除法,若除数为零,则结果为Inf。
- 算法结束。
注意:由于题目未限制整数大小,所以应该把分子、分母变量设为long long,即占8个字节。否则PAT上有的测试用例会出错。
#include <stdio.h>#include <stdlib.h>#include <math.h>#define MAX 1000typedef struct fraction{ long long n; long long a; long long b;} fraction;fraction convert(fraction);void print(fraction v3, char operator, fraction v4, fraction result);void print_fraction(fraction v);long long greatest_common_divisor(long long a, long long b);int main(int argc, const char * argv[]) { fraction v1={0}, v2={0}, result={0}, v3={0}, v4={0}; scanf("%lld/%lld %lld/%lld", &(v1.a), &(v1.b), &(v2.a), &(v2.b)); result.a=v1.a*v2.b+v2.a*v1.b; result.b=v1.b*v2.b; result=convert(result); v3=convert(v1); v4=convert(v2); print(v3, '+', v4, result); putchar('\n'); result.a=v1.a*v2.b-v2.a*v1.b; result.b=v1.b*v2.b; result=convert(result); print(v3, '-', v4, result); putchar('\n'); result.a=v1.a*v2.a; result.b=v1.b*v2.b; result=convert(result); print(v3, '*', v4, result); putchar('\n'); result.a=v1.a*v2.b; result.b=v1.b*v2.a; result=convert(result); print(v3, '/', v4, result); return 0;}fraction convert(fraction f){ long long div=0; fraction tmp={0}; if(f.a<0){ tmp.a=-f.a; } else{ tmp.a=f.a; } if(f.b<0){ tmp.b=-f.b; } else{ tmp.b=f.b; } if(tmp.a*tmp.b){ div=greatest_common_divisor(tmp.a,tmp.b); tmp.a/=div; tmp.b/=div; } if(tmp.b){ tmp.n=tmp.a/tmp.b; tmp.a=tmp.a%tmp.b; if((f.a>=0)^(f.b>=0)){ if(tmp.n){ tmp.n*=-1; } else{ tmp.a*=-1; } } } else{ tmp.n=0; tmp.a=0; tmp.b=0; } return tmp;}long long greatest_common_divisor(long long a, long long b){ long long i; while(a%b!=0){ i=a%b; a=b; b=i; } return b;}void print(fraction v3, char c, fraction v4, fraction result){ print_fraction(v3); printf(" %c ", c); print_fraction(v4); printf(" = "); print_fraction(result); return ;}void print_fraction(fraction v){ if(v.n<0){ if(v.a==0){ printf("(%lld)", v.n); } else{ printf("(%lld %lld/%lld)", v.n, v.a, v.b); } } else if(v.n==0){ if(v.a==0){ if(v.b){ printf("%lld", v.n); } else{ printf("Inf"); } } else if(v.a>0){ printf("%lld/%lld", v.a, v.b); } else if(v.a<0){ printf("(%lld/%lld)", v.a, v.b); } } else if(v.n>0){ if(v.a==0){ printf("%lld", v.n); } else if(v.a>0){ printf("%lld %lld/%lld", v.n, v.a, v.b); } } return ;}
0 0
- 1034. 有理数四则运算
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算
- 1034. 有理数四则运算(20)
- Laravel 用户认证
- 小故事:架构师需要做什么?
- iOS面试题二
- 无图片纯css实现中国象棋棋子
- 正则表达式
- 1034. 有理数四则运算
- python第一次学习笔记(简略)
- iptables: Firewall modules are not loaded.
- javascript中的BOM和DOM
- 代码的等价性
- 从头认识Spring-2.3 注解装配-@autowired(4)-required(1)
- linux命令中的‘--’解释
- 1025. 反转链表 (25)
- Plan to write and My 2016 Plan