欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Pat乙级 1034 有理数四则运算

发布时间:2025/4/16 编程问答 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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 有理数四则运算的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。