2015-10-07 31 views
-3
import java.util.*; 
import java.math.*; 

class Solution 
{ 
public static void main(String []args) 
{ 
    Scanner in = new Scanner(System.in); 
    int cases = in.nextInt(); 
    BigDecimal[] val = new BigDecimal[cases]; 
    for (int i = 0; i < cases; i++) { 
     val[i] = in.nextBigDecimal(); 
    } 

    List<BigDecimal> lnums = Arrays.asList(val); 
    Collections.sort(lnums); 

    for(int i = lnums.size()-1 ; i >=0 ; i--) { 
     System.out.println(lnums.get(i)); 
    } 
} 
} 

我在這裏的任務是按降序排列大十進制數組,但我無法理解我的代碼中哪裏出錯了,我如何實現預期的輸出。如何確保它在數字之前不加零?

你的輸出(stdout)

56.6

2.34

0.12

0.12

0.000

-100

期望輸出

56.6

02.34

0.12

0.12

000.000

-100

+0

它在哪裏添加零? –

回答

0

既然你有你的BigDecimal不能區分是它輸入爲 '0.12' 或」 0.12' 。所以你唯一的選擇是在解析BigDecimals之前執行你的自定義排序。

0

你讀的掃描儀輸入作爲的BigDecimal(in.nextBigDecimal()

那一刻你「寬鬆」的前導零。您必須以String形式讀取它們並將它們比較爲BigDecimal。懷疑我的解決方案是最好的,但它應該工作。

String[] val = new String[cases]; 
for (int i = 0; i < cases; i++) { 
    val[i] = in.nextLine(); 
} 

List<string> lnums = Arrays.asList(val); 

Collections.sort 
    (lnums 
    , (String o1, String o2) 
    -> new BigDecimal(o2).compareTo(new BigDecimal(o1)) 
) 

for(int i = lnums.size()-1 ; i >=0 ; i--) { 
    System.out.println(lnums.get(i)); 
} 
相關問題