Pat乙级 1034 有理数四则运算
生活随笔
收集整理的这篇文章主要介绍了
Pat乙级 1034 有理数四则运算
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
Pat乙级 1034 有理数四则运算
- 思路
- 代码
题目网址
https://pintia.cn/problem-sets/994805260223102976/problems/994805287624491008
思路
注意两个点,一是辗转相除法递归会超时,二是int范围会爆,得用long,不然测试点2、3过不去。思路就是模拟。
代码
#include<iostream> #include<cmath>using namespace std;long gcd(long a, long b) {if (a < b)swap(a, b); // return b == 0 ? a : gcd(b, a % b);while(b > 0) {int t = a % b;a = b;b = t;}return a; }void fun(long a, long b){//化简 if (a == 0) {cout << 0;return ;}long t = gcd(abs(a), abs(b));//最大公因数 long T = abs(a * b) / t;//最小公倍数 a /= t;b /= t;if (a < 0) {cout << "(-";a = -a;if ((a % b) == 0)cout << a / b;else {if (a / b > 0)cout << a / b << " ";cout << a % b << "/" << b;}cout << ")";}else if (a == 0)cout << 0;else {if ((a % b) == 0)cout << a / b;else {if (a / b > 0)cout << a / b << " ";cout << a % b << "/" << b;}} } int main() {long a1;long a2;long b1;long b2;long A;long B;scanf("%ld/%ld %ld/%ld", &a1, &a2, &b1, &b2);//加法 fun(a1, a2);cout << " + ";fun(b1, b2);cout << " = ";A = a1 * b2 + b1 * a2;B = a2 * b2;if (B < 0) {A = -A;B = -B;}fun(A, B);cout << endl;//减法 fun(a1, a2);cout << " - ";fun(b1, b2);cout << " = ";A = a1 * b2 - b1 * a2;B = a2 * b2;if (B < 0) {A = -A;B = -B;}fun(A, B);cout << endl;//乘法fun(a1, a2);cout << " * ";fun(b1, b2);cout << " = ";A = a1 * b1;B = a2 * b2;if (B < 0) {A = -A;B = -B;}fun(A, B);cout << endl;//除法fun(a1, a2);cout << " / ";fun(b1, b2);cout << " = ";A = a1 * b2;B = a2 * b1;if (B < 0) {A = -A;B = -B;}if (B == 0) {cout << "Inf" << endl;return 0;}fun(A, B);cout << endl;return 0; }总结
以上是生活随笔为你收集整理的Pat乙级 1034 有理数四则运算的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Top-1 Error Top-5 E
- 下一篇: Pat乙级 1045 快速排序