2011-10-24 45 views
1

我有這樣的問題:處理大量

一個正整數稱爲palindrome如果閱讀時從左至右,從右到左其在十進制表示是一樣的。對於不超過1000000數字的給定正整數K,將大於K的最小回文的值寫入輸出。數字始終顯示,不帶前導零。 輸入

第一行包含整數t,測試用例的數量。在接下來的t行中給出整數K。 輸出

對於每個K,輸出的最小回文大於K。 實施例

輸入:

2 
808 
2133 

輸出:

818 
2222 

我的碼的輸入轉換爲字符串,並相應地評估串進行調整的任一端和向內移動。然而,這個問題需要,它可以採取值高達10^6位數字,如果我嘗試解析大量的我得到了一些格式異常即

Integer.parseInt(LARGENUMBER); 

Long.parseInt(LARGENUMBER); 

LARGENUMBER是超出範圍。任何人都可以考慮周圍的工作或如何處理如此龐大的數字?

回答

5

您或許可以使用BigInteger類來處理像這樣的大整數。

但是,我不會指望它在如此巨大的尺寸下效率高。因爲它仍然使用O(n^2)算法進行乘法和轉換。

+0

BigInteger只能處理長達20位數的數字,不是嗎? – Mead3000

+6

@ Mead3000 BigInteger可以(理論上)處理與內存可處理的數量一樣大的數字。 – NullUserException

5

想想你現在要做的步驟。你看到一些似乎有點多餘的東西,因爲你將數字轉換爲字符串來處理它?

+0

他的算法可能甚至不需要使用數字操作...... – hugomg

+0

這就是要點。 :) –

+0

我不知道你是否聽說過spoj.pl,但問題出在那裏......它在我的計算機上運行良好,但是當我將它提交給站點時,它超出了時間限制。所以我認爲所有的轉換都會給我的算法帶來時間複雜度。 你有什麼建議嗎? – Mead3000

2

雖然這個問題談到整數,但它這樣做只是爲了限制輸入和輸出字符和格式。這是一個真正的字符串操作問題,經過慎重選擇。既然是這樣,你實際上不需要真正以整數讀取輸入,只需要字符串。

這將使驗證迴文簡單。你唯一需要解決的就是選擇更高的一個。

+0

您可以縮小需要修改的字符串部分,方法是找出哪些部分已經是迴文,刪除這些部分,然後將其轉換爲數字,然後進行算術運算,然後進行字符串替換。也許不會。只是一個建議。 – allingeek

+0

,但是當每個數字需要改變時,即899999999 ---> 900000009,需要考慮整個數字的值。或者我在這裏錯過了一個技巧 – Mead3000

+0

歡呼,我修好了。 – Mead3000