Java 比较两个大数字

Java 比较两个大数字,java,compare,Java,Compare,提供了两个表示两个数字的字符串作为输入。字符串中的数字可能太大,以至于它们可能无法用Java数据类型int表示。目的是比较这两个数字并将其作为字符串输出 例如,我们必须比较: “874986754789289867753896798679854698798789857387687546456” 及 “98347598375689758967756458678976893478967586857687569874” 这两种类型在JAVA中都超出了long和int数据类型的范围 在比较之后,我们必须

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

例如,我们必须比较:

“874986754789289867753896798679854698798789857387687546456”

“98347598375689758967756458678976893478967586857687569874”

这两种类型在JAVA中都超出了long和int数据类型的范围
在比较之后,我们必须将该数字作为字符串输出,不清楚您是要进行比较还是进行减法,但Java的类具有这两种操作。这可能是您需要的:

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

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

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

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

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

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

  • 检查数字符号(如果一个是负数,一个是正数,则答案显而易见)
  • 删除前导零-
    0000123
    表示
    123
  • 删除前导零后,比较数字的长度(正数中越长的一个越大)
  • 如果两个数字的长度相同,则从左到右迭代,直到找到两个不同的数字(如果找不到任何相等的数字)
  • 您可能需要的字符串类的成员

    • toCharArray()
    • charAt(整数索引)
    • 长度


    如果您可以使用内置解决方案,您可以使用这些字符串创建
    biginger
    实例,并使用其
    compareTo
    方法,该方法将告诉您一个数字是大于(正结果)等于(0)还是小于(负结果)。

    要使用如此大的数字,必须将它们声明为双精度。您可以使用解析器将字符串转换为数字

    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中,您可以随意比较这些数字


    仅使用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");
    }
    

    你的意思是想把这两个数字相减,然后把差值作为一个数字计算出来吗?你必须写自己的方法吗?或者你能使用内置解决方案吗?我们还可以看到你试图解决这个问题吗?@erstwhileii No用户会给我们字符串,实际上是两个数字,但是我们必须比较这些数字并输出更大的数字///@Pshemo我们也可以编写我们自己的方法,可以从左到右进行比较。如果两个数字长度相同,则第一个较大的数字确定哪个数字较大。(如果它们的长度不相同,并且都没有前导零,那么越长的数字越大。)使用BigDecimal或BigInteger。。不要重新执行控制盘(可能有错误)@HotLicks你是对的。我真的没有想到这一点。它的效率更高,需要检查前导零。