pat 乙级 1034. 有理数四则运算(20)
来源:互联网 发布:楠楠广场舞网络一线牵 编辑:程序博客网 时间:2024/06/05 16:31
具体思路见代码:
#include <stdio.h>#include <iostream>#include <cstdlib>#include <cmath>#include <cctype>#include <string>#include <cstring>#include <algorithm>#include <ctime>/////////////// 垮掉!!!!!!!!!!! 考虑 超时 问题 !!可以考虑 先化最简分数 。会减少代码的冗余度。 using namespace std;// 求最大公约数// long long int gcd(long long int t1, long long int t2) {return t2 == 0 ? t1 : gcd(t2, t1 % t2);}//本来自己写了个,然后超时了= =|| gcd// 把两个 整数 按照 分母 a / b 格式输出 ;// void printfNum(long long int m,long long int n) {// long long int t = gcd (m,n); //求出 最大公约数t 先化成最简分数 。// long long int a=abs(m/t); //然后 化成最简分数 。// long long int b=abs(n/t); // 取绝对值 方便后面计算;// if (m==0) {// cout<<"0";// }// if (n==0) {// cout<<"Inf";// }// if (m*n>0 && a>b && a%b!=0) {// cout<<a/b<<" "<<a-(a/b*b)<<"/"<<b; // 比如 5/3 等于 1 2/3 其中 1=5/3; 2/3 = (5-5/3*3)/3 // }// if (m*n>0 && a>=b &&a%b==0) {// cout<<a/b;// }// if (m*n>0 && a<b) {// cout<<a<<"/"<<b;// }// if (m*n<0 && a>b && a%b!=0) {// cout<<"(-"<<a/b<<" "<<a-(a/b*b)<<"/"<<b<<")";// }// if (m*n<0 && a>=b && a%b==0) {// cout<<"(-"<<a/b<<")";// }// if (m*n<0 && a<b) {// cout<<"(-"<<a<<"/"<<b<<")";// }// } 一开始 写的方法 无论如何都过不了 测试点2 所以放弃~~重新写 ,不过这里注释一下 方便日后改写。// 把两个 整数 按照 分母 a / b 格式输出 ;void printfNum(long long int m, long long int n) { int flag1 = 0; // 标记m 正负 =0 代表为大于0 =1 代表小于0 int flag2 = 0; // 标记n 正负 if (n == 0) { cout << "Inf"; return ; } if (m == 0) { cout << 0; return ; } if (m < 0) { m = 0 - m; // 取反 方便 计算 flag1 = 1; } if (n < 0) { n = 0 - n; flag2 = 1; } int flag = 0; // 标记 m * n 正负 0 代表为正 1代表为负 if (flag1 == 1 && flag2 == 1) { flag = 0; } else if (flag1 == 1 || flag2 == 1) { flag = 1; } if (m == n) { if (flag == 1) cout << "(-1)"; else cout << "1"; return; } long long int x = m % n; // 判断是否 能整除 long long int y = m / n; if (x == 0) { // 能整除 if (flag == 0) cout << y; // 为正 并且 刚好能整除; else cout << "(-" << y << ")"; // 为负 。 return ; } else { // 判断不能整除的情况 long long int t1 = m - y * n; // 这里无需比较m 与n 的大小问题 因为y=m/n 如果m<n y=0;所以无需再判断 long long int t2 = n; long long int t = gcd(t1, t2); // 最大公约数 t1 = t1 / t; // 化为最简 t2 = t2 / t; if (flag == 1) { cout << "(-"; if (y != 0) cout << y << " " << t1 << "/" << t2; else cout << t1 << "/" << t2; // y=0 就是 输入的m<n,应当输出 m/n 的形式 cout << ")"; } else { if (y != 0) cout << y << " " << t1 << "/" << t2; else cout << t1 << "/" << t2; } }}void calculate(long long a1,long long b1,long long a2,long long b2,char c) {printfNum(a1,b1);cout<<" "<<c<<" ";printfNum(a2,b2);cout<<" = ";}int main() {long long int a1,b1,a2,b2;scanf("%lld/%lld%lld/%lld",&a1,&b1,&a2,&b2);// 求加法:calculate(a1,b1,a2,b2,'+');long long int sum1=a1*b2+b1*a2;long long int sum2=b1*b2;printfNum(sum1,sum2);cout<<endl;// 求减法 :calculate(a1,b1,a2,b2,'-');long long int sub1=a1*b2-b1*a2; // 2 3 2*4-3*3long long int sub2=b1*b2; // —— - —— = ——————printfNum(sub1,sub2); // 3 4 3*4cout<<endl; // 求乘法 calculate(a1,b1,a2,b2,'*');long long int mul1=a1*a2;long long int mul2=b1*b2;printfNum(mul1,mul2);cout<<endl;// 求除法;calculate(a1,b1,a2,b2,'/');long long int div1=a1*b2;long long int div2=b1*a2;printfNum(div1,div2);return 0;}
提交代码
这是我的提交图 :
阅读全文
0 0
- PAT-乙级-1034. 有理数四则运算(20)
- PAT乙级.1034. 有理数四则运算(20)
- PAT 乙级 1034. 有理数四则运算(20)
- PAT 乙级 1034. 有理数四则运算(20)
- PAT乙级 1034. 有理数四则运算(20)
- PAT乙级 1034. 有理数四则运算(20)
- [PAT乙级]1034. 有理数四则运算(20)
- PAT乙级1034. 有理数四则运算(20)
- pat 乙级 1034. 有理数四则运算(20)
- PAT 乙级 1034.有理数四则运算
- [PAT-乙级]1034.有理数四则运算
- PAT乙级 有理数四则运算(20)
- PAT乙级—1034. 有理数四则运算(20)-native
- 1034. 有理数四则运算(20)-PAT乙级真题
- PAT 乙级 1034. 有理数四则运算(20) Java版
- 1034. 有理数四则运算(20) PAT乙级真题
- PAT乙级题1034.有理数四则运算
- PAT(乙级)1024 有理数四则运算(20)
- C/C++:各种基本算法实现小结(七)—— 常用算法
- dsi_set_cmdq 用法
- 【POJ2449】Remmarguts' Date(A*搜索)
- jquery.dataTables 按条件查询后重新生成表格 点击排序还是原来的数据问题
- LeetCode5—Longest Palindromic Substring
- pat 乙级 1034. 有理数四则运算(20)
- 代码重构(六):代码重构完整案例
- luogu1073 【noip2009提高】最优贸易(spfa)
- Vuejs刷新页面子组件数据丢失问题的一点笔记
- jquery的appendTo怎么用?
- git pull问题
- 边框的样式
- SpringBoot(一):快速搭建一个springboot项目
- Segue几种类型(Show、Show Detail、Present modally、Present as Popover)的区别