繁体   English   中英

在Java中,从另一个数字字符串中减去1个数字字符串的最佳方法是什么

[英]In java what's the best way to subtract 1 numeric string from another numeric string

想要处理以下问题

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])并将答案附加到output [ctr]更好的方法?

BigInteger会处理这么大的数字吗?

您要交付的数字确实很大-比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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM