2016-12-25 131 views
0

要處理以下問題在java中什麼是從另一個數字串減去1的數字字符串的最佳方式

String findDifference(String, String) 
{ 
    str1 - str2 
} 

如果其中

str1 = "1002456789100245678910024567891002456789100245678910024567891002456789100245678910024567891002456789100245678910024567891002456789100245678910024567891002456789"; 
    str2 = "0022446611002244661100224466110022446611002244661100224466110022446611002244661100224466110022446611002244661100224466110022446611002244661100224466110022446611"; 
    output = "1000010178100001017810000101781000010178100001017810000101781000010178100001017810000101781000010178100001017810000101781000010178100001017810000101781000010178" 

    str1 = "1002456789100245678910024567891002456789100245678910024567891002456789100245678910024567891002456789100245678910024567891002456789100245678910024567891002456789100245678910024567891002456789100245678910024567891002456789"; 
    str2 = "0022446611000000000000224466110000000000002244661100000000000022446611000000000000224466110000000000002244661100000000000022446611000000000000224466110000000000002244661100000000000022446611000000000000224466110000000000"; 
    output = "1000010178100245678910000101781002456789100001017810024567891000010178100245678910000101781002456789100001017810024567891000010178100245678910000101781002456789100001017810024567891000010178100245678910000101781002456789" 

難道還有比穿越STR1 CTR什麼更好的/優化的方法(0,n-1)Integer.parseInt(str1 [ctr]) - Integer.parseInt(str2 [ctr])並將結果附加到輸出[ctr]?

BigInteger會處理這麼大的數字嗎?

回答

3

你交出的數字非常大 - 大於int。如果你想處理任意大的數字(內存允許),你需要使用的BigInteger:

public static String findDifference(String str1, String str2) { 
    return new BigInteger(str1).subtract(new BigInteger(str2)).toString(); 
} 

請注意,你的例子是錯誤的 - 輸出不是爲str1 - str2正確的結果。

如果我用這個小的驅動程序:

public static void main(String[] args) { 
    System.out.println(findDifference("10024567891002456789", "00224466110000000000")); 
    System.out.println(findDifference("1002456789", "0022446611")); 
    System.out.println(findDifference("1234567", "0111100")); 
} 

我得到這個輸出,並用計算器驗證表明,這是正確的:

9800101781002456789 
980010178 
1123467 
+0

歐文BigInteger的失敗可能讓說字符串長度是400+ –

+0

@VijayKurhade - 你是在問一個問題,還是在陳述一個事實?如果這是一個問題,那麼答案是否定的(除非你的堆太小),如果這是一個陳述,請提供一些證據來支持它。 –

相關問題