1034 有理數四則運算(20 分)

2021-08-27 06:01:15 字數 1600 閱讀 8390

注意兩點: 一,題目雖然說範圍在int 中,但是計算過程可能會超過int  所以直接 long long 

二 : 最大公約數直接用輾轉相除法:(否則測試點三可能超時)

輾轉相除法, 又名歐幾里德演算法(euclidean algorithm),是求最大公約數的一種方法。它的具體做法是:用較小數除較大數,再用出現的餘數(第一餘數)去除除數,再用出現的餘數(第二餘數)去除第一餘數,如此反覆,直到最後餘數是0為止。如果是求兩個數的最大公約數,那麼最後的除數就是這兩個數的最大公約數。

另一種求兩數的最大公約數的方法是更相減損法。

到此 算是斷斷續續地  終於做完了。(以前的我忘記做這題目了。。。)

下面放個圖留個紀念。23333

1034 有理數四則運算(20 分)

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

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

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

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

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

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

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

5/3 0/6
1 2/3 + 0 = 1 2/3

1 2/3 - 0 = 1 2/3

1 2/3 * 0 = 0

1 2/3 / 0 = inf

#include using namespace std;

long myp(long long a,long long b)

void func(long long a,long long b) else if(b==1 )

long long k=a/b;

a= (k!=0 ? a%b:a );

long long temp=myp(a,b);

a/=temp;

b/=temp;

if(b<0)

if(a==0)

if(k==0) a<0? printf("(%lld/%lld)",a,b) : printf("%lld/%lld",a,b);

else if(k<0) //k<0 a一定<0

printf("(%lld %lld/%lld)",k,-a,b) ;

else //k>0 a一定》0

printf("%lld %lld/%lld",k,a,b);

}int main()

1034 有理數四則運算 20分

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

1034 有理數四則運算 20分

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

1034 有理數四則運算 20

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