pat b 1034 有理数四则运算
来源:互联网 发布:ubuntu 两个源 编辑:程序博客网 时间:2024/05/22 07:10
rational n.有理数;fraction 分数;reduction 化简;
#include<cstdio>#include<algorithm>using namespace std;struct fraction{ long long up,down; fraction(){ up=0; down=0; }};//第二处int gcd(long long a,long long b){ return a%b?gcd(b,a%b):b;}fraction reduction(fraction a){ if(a.down<0){ //abs()求绝对值。第一处 a.up=-a.up; a.down=-a.down; }else if(a.down==0){ return a; } if(a.up==0){ a.down=1;//注意:输出的时候算整数 }else{ int d=gcd(abs(a.up),a.down); a.up=a.up/d; a.down=a.down/d; } return a;}void printFraction(fraction a){ fraction b=reduction(a); if(b.down==0){ printf("Inf"); return ; } if(b.up<0)printf("("); if(b.down==1){ printf("%lld",b.up); }else if(abs(b.up)>b.down){//注意:负数!! printf("%lld %lld/%lld",b.up/b.down,abs(b.up)%b.down,b.down); }else { printf("%lld/%lld",b.up,b.down); } if(b.up<0)printf(")");}fraction add(fraction a,fraction b){ fraction c; if(a.down!=b.down) { c.up=a.up*b.down+b.up*a.down; c.down=a.down*b.down; }else{ c.up=a.up+b.up; c.down=b.down; } return reduction(c);}fraction sub(fraction a,fraction b){ fraction c; if(a.down!=b.down) { c.up=a.up*b.down-b.up*a.down; c.down=a.down*b.down; }else{ c.up=a.up-b.up; c.down=b.down; } return reduction(c);}fraction multi(fraction a,fraction b){ fraction c; c.up=a.up*b.up; c.down=a.down*b.down; return reduction(c);}fraction div(fraction a,fraction b){ fraction c; c.up=a.up*b.down; c.down=a.down*b.up; return reduction(c);}int main(){ fraction a,b; scanf("%lld/%lld %lld/%lld",&a.up,&a.down,&b.up,&b.down); a=reduction(a); b=reduction(b); printFraction(a); printf(" + "); printFraction(b); printf(" = "); printFraction(add(a,b)); printf("\n"); printFraction(a); printf(" - "); printFraction(b); printf(" = "); printFraction(sub(a,b)); printf("\n"); printFraction(a); printf(" * "); printFraction(b); printf(" = "); printFraction(multi(a,b)); printf("\n"); printFraction(a); printf(" / "); printFraction(b); printf(" = "); printFraction(div(a,b)); printf("\n"); return 0;}
第一遍后两个测试点没过,改正了第二处gcd()的参数类型就过了(之前是int)就过了。第一处之前用的是abs(),以为是求相反数,结果是求绝对值,像“-5/-9”这样的就过不了,改正之后就好了。
总结:在大部分答案正确的情况下(分最多的测试用例答案正确),错误的可能有:a.没有注意取值边界的情况b.没有注意特殊取值的情况(要考虑到所有情况)以上两种情况具体会涉及到定义变量的类型,分支语句的判断条件等。
阅读全文
0 0
- pat b 1034 有理数四则运算
- PAT-B 1034. 有理数四则运算
- PAT-B 1034. 有理数四则运算
- PAT 1034有理数的四则运算
- PAT-B 1034. 有理数四则运算(20)
- PAT Basic 1034 有理数四则运算(20)
- PAT Basic 1034 有理数四则运算(20)
- PAT(basic level) 1034 有理数四则运算(20)
- PAT 乙等 1034 有理数四则运算
- PAT B1034. 有理数四则运算
- 【PAT】1034. 有理数四则运算(20)
- PAT乙级 有理数四则运算(20)
- PAT 乙级 1034.有理数四则运算
- [PAT-乙级]1034.有理数四则运算
- 1034. 有理数四则运算(20) PAT
- PAT 1034. 有理数四则运算(20)
- Pat(Basic Level)Practice--1034(有理数四则运算)
- PAT(A) 1088. Rational Arithmetic & PAT(B) 1034. 有理数四则运算(20)
- 批量改密码
- ubuntu14.04下nodejs+npm+bower的安装、调试和部署
- java NIO 知识点汇总
- lbp
- JFreeChart_web(二)
- pat b 1034 有理数四则运算
- mdev的使用方法和原理
- select * into 新表名 from 原表名 where 子句报错Undeclared variable
- php.ini修改php上传文件大小限制的方法详解
- 安卓,Rxjava观察者被观察者操作
- Android端通话记录读取
- javascript中this的指向详解
- echart 属性含义
- Mysql查询效率优化