L1 009 N個數求和 20分

2021-10-18 13:26:22 字數 1821 閱讀 6370

本題的要求很簡單,就是求n個數字的和。麻煩的是,這些數字是以有理數分子/分母的形式給出的,你輸出的和也必須是有理數的形式。

輸入格式:

輸入第一行給出乙個正整數n(≤100)。隨後一行按格式a1/b1 a2/b2 …給出n個有理數。題目保證所有分子和分母都在長整型範圍內。另外,負數的符號一定出現在分子前面。

輸出格式:

輸出上述數字和的最簡形式 —— 即將結果寫成整數部分 分數部分,其中分數部分寫成分子/分母,要求分子小於分母,且它們沒有公因子。如果結果的整數部分為0,則只輸出分數部分。

輸入樣例1:

52/5 4/15 1/30 -2/60 8/3

輸出樣例1:

3 1/3

前言:之前呢也做過一次,提交以後全通過了,可是當我又一次去做的時候提交了一下上次成功的**,居然只有12分了,好鬱悶,之前明明是對的呀,可能是上次的不嚴謹,人家更新了一下就出錯了總算搞定了,所以只好重做了,記錄一下。

分析:把要求和的數分成分子分母(z[101],m[101])存到兩個長整型陣列裡去,再定義乙個分子變數(zi),乙個分母變數(mu),它們就是最後求和結果,把兩個陣列中的值依次與那兩個變數相加。分三種情況判斷:

1.當前分母陣列裡值》=分母變數,且前者可整除後者

2.當前分母陣列裡的值《分母變數,且後者可整除前者

若是以上兩種情況,只需對其中一方進行放縮即可。

3最後就是倆分母不相等了,對兩方都放縮

(注:陣列裡的分母不用操作,只起乙個比驕作用)

求和結果都存到zi,和mu中後,就開始化簡了,我的想法是從j=2開始,只要j能同時整除分子分母,那麼好,我就讓j的價值最大化,while迴圈到j無法同時整除它們兩個,結束條件是j同時小於分子分母。

化簡完後分情況輸出:

1.分子《分母,只輸出分數

2.分子》=分母且能整除,只輸出整數

3.分子》分母且不能整除,分整數小數輸出

坑點:

要注意求和後分子是負數的情況,記得取絕對值

#include

#include

intmain()

,m[101]=

,i,j,zh,y,n;

scanf

("%lld"

,&n)

;for

(i=0

;i)scanf

("%lld/%lld"

,&z[i]

,&m[i]);

//把要求和的數分成分子分母存到長整型陣列裡去

zi=z[0]

,mu=m[0]

;for

(i=1

;i)//遍歷求和

else

if(mu>m[i]

&&(mu%m[i]==0

))z[i]*=

(mu/m[i]);

else

zi+=z[i];}

for(j=

2;j<=

abs(zi)

&&j<=mu;j++

)//化簡分子分母,找出兩數的公共因子,一定到取絕對值,應為分子(zi)可能是負的,迴圈就不成立了

}//下面就是分情況輸出結果了

if(zi>mu&&zi%mu!=0)

else

if(zi%mu==0)

printf

("%lld\n"

,zi/mu)

;else

printf

("%lld/%lld\n"

,zi,mu)

;return0;

}

L1 009 N個數求和 20 分

單位 浙江大學 時間限制 400 ms 記憶體限制 64 mb 長度限制 16 kb 本題的要求很簡單,就是求n個數字的和。麻煩的是,這些數字是以有理數分子 分母的形式給出的,你輸出的和也必須是有理數的形式。輸入第一行給出乙個正整數n 100 隨後一行按格式a1 b1 a2 b2 給出n個有理數。題...

L1 009 N個數求和 20分

本題的要求很簡單,就是求n個數字的和。麻煩的是,這些數字是以有理數分子 分母的形式給出的,你輸出的和也必須是有理數的形式。輸入格式 輸入第一行給出乙個正整數n 100 隨後一行按格式a1 b1 a2 b2 給出n個有理數。題目保證所有分子和分母都在長整型範圍內。另外,負數的符號一定出現在分子前面。輸...

L1 009 N個數求和 20分

l1 009 n個數求和 20分 本題的要求很簡單,就是求n個數字的和。麻煩的是,這些數字是以有理數分子 分母的形式給出的,你輸出的和也必須是有理數的形式。輸入格式 輸入第一行給出乙個正整數n 100 隨後一行按格式a1 b1 a2 b2 給出n個有理數。題目保證所有分子和分母都在長整型範圍內。另外...