2010-08-15 50 views
0

我想建立一個方法,輸出1000如果輸入數字是數千(如3458),100如果輸入數字是幾百等等。這可能嗎?Java(數百,數千等)

+9

這是一個功課題嗎? – 2010-08-15 10:05:14

回答

5

當然這是可能的。你爲什麼不發佈你的嘗試,我們可以告訴你如何解決任何問題。

4

正如史蒂夫說,它可能是一個好主意,給它一點嘗試自報家門,然後來到SO與特定問題(即「我做X,這是我的代碼,爲什麼不ÿ發生? 「)。然而,作爲一個小提示,假設你有純數字輸入(也就是說,它總是隻是一串數字,沒有「,」或類似的東西),你實際上可以使用字符串來完成工作 - 不需要使用數字類型(int等)...

(好吧,考慮一下,最後可能會有一個小數學計算,以獲得'100'或'1000'的最終結果「等等,但不多)

1

簡單的數學:

Math.pow(10, Math.floor(Math.log(n)/Math.log(10))) // for given n 
+0

注意:僅適用於正數。 – 2010-08-15 10:25:55

+0

的確,只有積極的。 – 2010-08-15 11:59:03

2

要擴大WHA牛逼尤瓦提供的,如果你不關心數字的符號(也就是,比如說輸入值3456和-3456應該都返回1000),你可以使用輸入的絕對值:

return Math.pow(10, Math.floor(Math.log(Math.abs(n))/Math.log(10))); // for input n 

如果你想處理所有可能的數值輸入,你也可以做你的計算前處理零值:

if (n == 0) // for input n 
    return 0; 
return Math.pow(10, Math.floor(Math.log(Math.abs(n))/Math.log(10))); // for input n 

數(0)是不確定的,所以你不要想如果n == 0,執行計算。你會得到一個有趣的答案(如果你甚至得到一個答案......我沒有運行這個代碼)。鑑於你提供的問題的描述,我認爲當輸入爲0時返回0是有意義的。零不在數千或數百或數十或數 - 在整數中,它是它自己的類別。所以你可以返回0.或者你可以拋出一個異常。

1

環路可以用來避免使用雙和最終的舍入問題(如果變換結果int)。
循環變量從1開始是乘以10每次通過而(下一個)的結果是小於輸入的號碼。
負值和零值輸入需要特殊處理。

+0

+1爲積分數學解。比嘗試使用公式更加優雅(至少對於這種類型的問題)。 – helios 2010-08-25 07:33:18

2

它不花哨,但它簡單易讀。

private static void homework(int n) { 
    if (n > 9999) { 
     System.out.println("Really big"); 
    } else { 

     if (n <= 99) { 
      System.out.println("Really small"); 
     } else if (n <= 999) { 
      System.out.println("Hundred"); 
     } else if (n <= 9999) { 
      System.out.println("Thousand"); 
     } else { 
      System.out.println("How did this get here? I'm not good with computer!"); 
     } 

    } 
}