PAT-B 1034. 有理数四则运算(20)
来源:互联网 发布:英国诺丁汉大学知乎 编辑:程序博客网 时间:2024/05/18 00:52
题目链接在此。
非常规整的一道有理数的四则运算。
有理数四则运算方法看这里。
#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;}
推荐严格按照这里的模板写,否则细节处容易出错,要不就像上面的代码,出来的好多abs(),囧。
0 0
- PAT-B 1034. 有理数四则运算(20)
- PAT-B 1034. 有理数四则运算
- PAT-B 1034. 有理数四则运算
- 【PAT】1034. 有理数四则运算(20)
- 1034. 有理数四则运算(20) PAT
- PAT 1034. 有理数四则运算(20)
- pat b 1034 有理数四则运算
- PAT-乙级-1034. 有理数四则运算(20)
- C++ - PAT - 1034. 有理数四则运算(20)
- PAT乙级.1034. 有理数四则运算(20)
- PAT 乙级 1034. 有理数四则运算(20)
- PAT BASIC LEVEL 1034. 有理数四则运算(20)
- PAT 乙级 1034. 有理数四则运算(20)
- PAT乙级 1034. 有理数四则运算(20)
- PAT乙级 1034. 有理数四则运算(20)
- [PAT乙级]1034. 有理数四则运算(20)
- PAT乙级1034. 有理数四则运算(20)
- pat 乙级 1034. 有理数四则运算(20)
- 测试用例基本概念
- springmvc-mybatis 之mapper代理开发
- Android BaseActivity、BaseFragment等 常用方法封装
- Android界面性能优化
- thinking in java——0325学习笔记
- PAT-B 1034. 有理数四则运算(20)
- 19. Remove Nth Node From End of List
- 梦联2.0互助优势——打造一个没有难民的互联网金融平台
- 显著减少项目gradle编译时间
- 自己实现Struts2(一)Struts流程介绍和环境搭建
- Java-String用法
- CUDA之静态、动态共享内存分配详解
- java多线程详解
- py2.7《机器学习实战》利用SVD简化数据