1. 程式人生 > >POJ 2325 大數除法 貪心

POJ 2325 大數除法 貪心

 

要求:一個n位數M各位相乘得到一個數N,已知N求最小的M。N的位數小於1000.

方法:大數除法 貪心

題面看了好久:679 -> 378 -> 168 -> 48 -> 32 -> 6. 才知道是什麼意思。

1.若N只有一位,那麼前面加個1湊成兩位數即可。

2.當N有多位時,M不會含有1,這樣只會使位數增加且對乘積沒有影響。因此M是由若干個2-9的數字排列而成的多位數,因所求是最小的N,故N是由這些數字從小到大排列而成的。

3.貪心:for迴圈從9到2遍歷使判定是否能除盡,若能除盡則運算到除不盡該數為止。

              可能產生類似於1215=9*9*5*3的結果,倒序可避免1215=3*3*3*3*3*5的結果。

              此步即貪心求出儘可能多的較大的值放在後面使排列起來的M較小。

4.大數除法:用字串s讀取數字,並每位減'0'儲存數字,但字串長度需提前儲存,字串長度會變化。然後根據手算的原理進行計算,每步的結果用t陣列儲存。將t陣列賦值給s,注意是從t陣列的第一個不為0的位置開始賦值。