1034. 有理数四则运算(20)
来源:互联网 发布:淘宝店有差评怎么办 编辑:程序博客网 时间:2024/06/09 04:15
题目描述
本题要求编写程序,计算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
C++代码
#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;typedef long long LL;struct Fraction{ LL up,down;};//gcdLL gcd(LL a,LL b){ if(b == 0) return a; else gcd(b,a%b);} //约分 Fraction reduction(Fraction a){ LL d = gcd(abs(a.up), abs(a.down)); a.up /= d; a.down /= d; return a;} //加法Fraction add(Fraction a, Fraction b) { Fraction res; res.up = a.up*b.down + b.up*a.down; res.down = a.down * b.down; return reduction(res);}//减法Fraction minu(Fraction a, Fraction b) { Fraction res; res.up = a.up*b.down - b.up*a.down; res.down = a.down * b.down; return reduction(res); }//乘法 Fraction multi(Fraction a, Fraction b) { Fraction res; res.up = a.up*b.up; res.down = a.down * b.down; return reduction(res); }//除法 Fraction divide(Fraction a, Fraction b) { Fraction res; res.up = a.up*b.down; res.down = a.down * b.up; return reduction(res); }//输出某个分数 void printFraction(Fraction a){ a = reduction(a); //对a化简; if(a.up == 0){ printf("0"); return ; } if(abs(a.down) == 1){ if(a.up * a.down > 0){ //正分数 printf("%lld",abs(a.up)); }else{ //负分数 printf("(-%lld)",abs(a.up)); } return; } if(abs(a.up) > abs(a.down)){ LL integer = a.up / a.down; if(integer < 0){ printf("(%lld %lld/%lld)",integer, abs(a.up)%abs(a.down), abs(a.down)); }else{ printf("%lld %lld/%lld",integer, abs(a.up)%abs(a.down), abs(a.down)); } return ; } //如果是真分数,则正常输出 if(a.up*a.down < 0){ //分数负数 printf("(-%lld/%lld)",abs(a.up), abs(a.down)); }else{ //分数为正 printf("%lld/%lld",abs(a.up),abs(a.down)); }} //输出等号后面的部分 void printRes(Fraction res){ printf(" = "); printFraction(res); printf("\n");} int main(){ Fraction a, b; scanf("%lld/%lld %lld/%lld",&a.up,&a.down,&b.up,&b.down); Fraction res; //加法 res = add(a,b); printFraction(a); printf(" + "); printFraction(b); printRes(res); //减法 res = minu(a,b); printFraction(a); printf(" - "); printFraction(b); printRes(res); //乘法 res = multi(a,b); printFraction(a); printf(" * "); printFraction(b); printRes(res); //除法 printFraction(a); printf(" / "); printFraction(b); if(abs(b.up) == 0 ){ printf(" = Inf\n"); }else{ res = divide(a,b); printRes(res); } return 0;}
阅读全文
0 0
- 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. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20)
- JDK动态代理笔记
- dubbo高级篇-13 Dubbo服务集群-集群容错模式
- java程序在JVM中的运行顺序:
- JavaScript语言基础
- 【NOIP2017提高组正式赛】Day1T3逛公园
- 1034. 有理数四则运算(20)
- 第一次考试
- HDU 2897-邂逅明下 博弈论初步 巴什博弈
- 文件上传
- TCP
- Conclusion of the first exam
- Construct2制作游戏进阶教程
- 博客之路之起点篇
- ubuntu super 键盘 D 显示桌面