2013-08-02 45 views
0

我想將某些數字添加到數字中。例如,給定數字1234,我想返回80,並給出12345,我想返回80.將數字預先添加到數字

我目前的工作解決方案是Integer.parseInt("800" + value),它涉及字符串格式化,連接和解析。我正在尋找一種更便宜,更簡單的解決方案。 (來自C背景,這看起來很貴,Java程序員通常似乎不關心操作的開銷,但我可能會這樣做)。

我認爲添加8000000(或80000000,800000000,等等),但這取決於原始數字中的位數,這可能會有所不同。

我會很感激任何建議。

(在幾個月後,2014年1月添加): 作爲這個問題的一個順便說一句,我的要求已經改變,因此:如果原始數字是7位數字,只需預先加上「80」最多9位數字。我不想再找到答案,因爲我打算以簡單易讀的方式來做,但我只是想把原始問題的曲線球附錄丟掉。感謝所有提供有用建議的人。

+2

以何種方式,你覺得你的解決方案是不便宜?你有基準嗎?它看起來不錯。 –

+0

@Menachem搜索左邊填充... –

+1

聽起來像是一個過早優化的例子。 –

回答

0

試試這個

int res = 8000 * (int) Math.pow(10, (int) Math.log10(v) + 1) + v; 
+0

我想這是我正在尋找的,一種快速的方法來確定一個數字的長度,而不會將其轉換爲字符串。但正如其他人指出的,我最初的解決方案讀起來更容易。所以謝謝你們展示了另一種選擇,但我想我會堅持我的原創(我希望你也會同意)。 – Menachem

4

像這樣將避免通過串去:

int value = 1234; 
int copy = value; 
int toAdd = 8000; 
while ((copy /= 10) > 0) toAdd *= 10; 
value += toAdd; 

但因爲我不能打擾到基準它,我不能上的表現發表評論。就個人而言,我會爲你在問題中的可維護代碼,這可能是性能足夠用於大多數目的...

+0

+1爲更乾淨的代碼:) – PoByBolek

0

爲什麼不使用加法設置高位?

例如,

8000000000 + phone_number 

這會給你你正在尋找的結果。另外,從性能的角度來看,整數加法非常快,因爲硬件具有特定的指令,可以執行該操作只有一個時鐘週期。

+0

我沒有在這裏的Eclipse,但是這樣的事情: int value = 1234; int toAdd = 8000; toAdd = Math.pow(10,(toAdd +「」).length()); value + = toAdd; –

+0

因爲值的長度(例如phone_number)是可變的。 – Menachem

+0

爲什麼不比較你的值與1,10,100,1000,...等等來確定位數,然後附加適當的零並使用加法? – bblincoe