PAT乙級1034 有理數四則運算 20

2021-08-07 09:34:06 字數 2029 閱讀 5542

題目:

本題要求編寫程式,計算2個有理數的和、差、積、商。

輸入格式:

輸入在一行中按照「a1/b1 a2/b2」的格式給出兩個分數形式的有理數,其中分子和分母全是整型範圍內的整數,負號只可能出現在分子前,分母不為0。

輸出格式:

分別在4行中按照「有理數1 運算子 有理數2 = 結果」的格式順序輸出2個有理數的和、差、積、商。注意輸出的每個有理數必須是該有理數的最簡形式「k a/b」,其中k是整數部分,a/b是最簡分數部分;若為負數,則須加括號;若除法分母為0,則輸出「inf」。題目保證正確的輸出中沒有超過整型範圍的整數。

輸入樣例1:

2/3 -4/2
輸出樣例1:
2/3 + (-2) = (-1 1/3)

2/3 - (-2) = 2 2/3

2/3 * (-2) = (-1 1/3)

2/3 / (-2) = (-1/3)

輸入樣例2:
5/3 0/6
輸出樣例2:
1 2/3 + 0 = 1 2/3

1 2/3 - 0 = 1 2/3

1 2/3 * 0 = 0

1 2/3 / 0 = inf

思路:
1. 本題主要任務是對輸入的數位化簡,在化簡過程中需要約分、判斷分子分母大小關係和正負,考慮用函式來實現;
2. 首先定義函式判斷兩數是否互質,求出最大公因數並約分;
3. 之後定義化簡函式和加減乘除四則運算;
4. 最後是主函式;
5. 需要注意的是數字可能較大,要用到long long int,並且要注意在輸入輸出時在scanf和printf函式裡要用%lld,不能用%d,沒注意會卡很長時間。
#includeusing namespace std;

int gca (long long int m, long long int n)

r=m%n;

while (r)

return n;

}void huajian (long long int x, long long int y)

if (y < 0)

if (y == 0)

printf ("inf");

else if (x == 0)

printf ("0");

else if (x < y)

if (flag == -1)

printf ("(");

if (x != 0)

printf ("%lld/%lld", x*flag, y);

if (x == 0)

printf ("0");

if (flag == -1)

printf (")");

}else if (x >= y)

if (flag == -1)

printf ("(");

if (x != 0)

printf ("%lld %lld/%lld", q*flag, x, y);

if (x == 0)

printf ("%lld", q*flag);

if (flag == -1)

printf (")");

}return;

}void add (long long int a, long long int b, long long int c, long long int d)

void minu (long long int a, long long int b, long long int c, long long int d)

void multi (long long int a, long long int b, long long int c, long long int d)

void divide (long long int a, long long int b, long long int c, long long int d)

int main()

PAT乙級1034 有理數四則運算

1034 有理數四則運算 20 20 分 本題要求編寫程式,計算2個有理數的和 差 積 商。輸入格式 輸入在一行中按照 a1 b1 a2 b2 的格式給出兩個分數形式的有理數,其中分子和分母全是整型範圍內的整數,負號只可能出現在分子前,分母不為0。輸出格式 分別在4行中按照 有理數1 運算子 有理數...

PAT 乙級 1034 有理數四則運算(模擬)

1034 有理數四則運算 20 20 分 本題要求編寫程式,計算2個有理數的和 差 積 商。輸入格式 輸入在一行中按照 a1 b1 a2 b2 的格式給出兩個分數形式的有理數,其中分子和分母全是整型範圍內的整數,負號只可能出現在分子前,分母不為0。輸出格式 分別在4行中按照 有理數1 運算子 有理數...

PAT 1034 有理數四則運算

1034 有理數四則運算 20 分 本題要求編寫程式,計算 2 個有理數的和 差 積 商。輸入在一行中按照a1 b1 a2 b2的格式給出兩個分數形式的有理數,其中分子和分母全是整型範圍內的整數,負號只可能出現在分子前,分母不為 0。分別在 4 行中按照有理數1 運算子 有理數2 結果的格式順序輸出...