2016-12-25 19 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 - 你是在问一个问题,还是在陈述一个事实?如果这是一个问题,那么答案是否定的(除非你的堆太小),如果这是一个陈述,请提供一些证据来支持它。 –

相关问题