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 C++常用函数(持续更新)