比较两个大数字

时间:2014-08-23 13:34:10

标签: java compare

提供了两个代表两个数字的字符串作为输入。字符串中的数字可能非常大,以至于它们可能无法由Java数据类型int表示。目标是比较两个数字并将该数字输出为字符串

例如,我们必须比较:

" 874986754789289867753896798679854698798789857387687546456"

" 98347598375689758967756458678976893478967586857687569874"

它们都在JAVA中超出long和int数据类型的范围 并且在比较之后我们必须将该数字输出为字符串

6 个答案:

答案 0 :(得分:8)

你可以先看看每个字符串的长度。如果其中一个更长并且您知道它们都是无符号值,则较长的字符串具有较大的数字。如果它们都具有相同的长度,则从左到右开始比较字符串char by char。当你找到你的第一个更大的数字时,你得出结论这个数字更大。

答案 1 :(得分:2)

您是否尝试比较或减去并不清楚,但Java的BigInteger类同时具有这两种操作。这可能就是你所需要的:

BigInteger a = new BigInteger("874986754789289867753896798679854698798789857387687546456");
BigInteger b = new BigInteger("98347598375689758967756458678976893478967586857687569874");

System.out.println( (a.compareTo(b) > 0 ? "a" : "b") + " is larger.");

如果您需要减去我肯定会使用BigInteger的数字,但如果您需要做的就是比较它们,您可以编写自己的方法。你的一个输入字符串比另一个输入字符串长,所以禁止前导零,它会立即告诉你哪个更大。如果字符串长度相同,您可以在循环中逐个字符地比较它们,以查看哪个更大。字符串charAttoCharArray方法为您提供了两种不同的方法来实现此方法。

答案 2 :(得分:0)

如果是学校作业,您不能使用内置解决方案但是您需要编写自己的方法来比较这些字符串,那么您需要

  1. 检查数字的符号(如果一个是否定的,一个是肯定的,那么回答是显而易见的)
  2. 删除前导零 - 0000123代表123
  3. 删除前导零后比较数字长度(正数中较长的一个较大)
  4. 如果两个数字的长度相同,则从左到右迭代它们,直到找到两个不同的数字(如果你找不到任何数字相等)。
  5. 您可能需要的String类成员

    • toCharArray()
    • charAt(int index)
    • length

    如果您可以使用内置解决方案,您可以使用这些字符串创建BigInteger个实例并使用其compareTo方法,该方法将判断一个数字是否更大(正结果)等于(0 )或者比其他人更小(负面结果)。

答案 3 :(得分:0)

为了使用大数字,必须将它们声明为double。您可以使用解析器将字符串转换为数字。

public static void main(String [] args) {
    String numberOne = "874986754789289867753896798679854698798789857387687546456";
    double parsedNumberOne = Double.parseDouble(numberOne);

    String numberTwo = "98347598375689758967756458678976893478967586857687569874";
    double parsedNumberTwo = Double.parseDouble(numberTwo);

    double result = compareMethod (numberOne, numberTwo);
    System.out.println("Result = " + result);
}

我明确地声明了数字,而不是通过阅读用户输入,但您可以轻松地修改它以与您的代码内联。在compareMethod中,您可以随意比较这些数字。

此致

答案 4 :(得分:0)

使用compareTo()比较两个字符串就足够了。比较将通过将每个字符转换为ASCII值来完成。

String number1 = "874986754789289867753896798679854698798789857387687546457";
String number2 = "874986754789289867753896798679854698798789857387687546456";

int result = number1.compareTo(number2);
if (result == 0) {
    System.out.println("Both are equal");
} else if (result > 0) {
    System.out.println("Number1 is greater");
} else {
    System.out.println("Number2 is greater");
}

答案 5 :(得分:-1)

您需要从右到左逐个(或逐个组)比较字符(转换为数字)。分别使用charAt(int)substring(int, int)等方法。