【问题标题】:How do I convert a String to a BigInteger?如何将字符串转换为 BigInteger?
【发布时间】:2013-03-20 23:32:12
【问题描述】:

我正在尝试从标准输入中读取一些非常大的数字并将它们相加。

但是,要添加到 BigInteger,我需要使用 BigInteger.valueOf(long);

private BigInteger sum = BigInteger.valueOf(0);

private void sum(String newNumber) {
    // BigInteger is immutable, reassign the variable:
    sum = sum.add(BigInteger.valueOf(Long.parseLong(newNumber)));
}

这很好用,但由于 BigInteger.valueOf() 只需要 long,我无法添加大于 long 的最大值 (9223372036854775807) 的数字。

每当我尝试添加 9223372036854775808 或更多时,我都会收到 NumberFormatException(这是完全可以预料的)。

BigInteger.parseBigInteger(String)之类的东西吗?

【问题讨论】:

    标签: java string biginteger


    【解决方案1】:

    如果您可能想将纯文本(不仅仅是数字)转换为 BigInteger,您将遇到异常,如果您尝试:new BigInteger("not a Number")

    在这种情况下,您可以这样做:

    public  BigInteger stringToBigInteger(String string){
        byte[] asciiCharacters = string.getBytes(StandardCharsets.US_ASCII);
        StringBuilder asciiString = new StringBuilder();
        for(byte asciiCharacter:asciiCharacters){
            asciiString.append(Byte.toString(asciiCharacter));
        }
        BigInteger bigInteger = new BigInteger(asciiString.toString());
        return bigInteger;
    }
    

    【讨论】:

      【解决方案2】:

      BigInteger 有一个构造函数,您可以在其中将字符串作为参数传递。

      试试下面,

      private void sum(String newNumber) {
          // BigInteger is immutable, reassign the variable:
          this.sum = this.sum.add(new BigInteger(newNumber));
      }
      

      【讨论】:

        【解决方案3】:

        对于要将arraystrings 转换为arraybigIntegers 的循环,请执行以下操作:

        String[] unsorted = new String[n]; //array of Strings
        BigInteger[] series = new BigInteger[n]; //array of BigIntegers
        
        for(int i=0; i<n; i++){
            series[i] = new BigInteger(unsorted[i]); //convert String to bigInteger
        }
        

        【讨论】:

          【解决方案4】:

          您可以直接使用带有字符串参数的 BigInteger 构造函数,而不是使用 valueOf(long)parse()

          BigInteger numBig = new BigInteger("8599825996872482982482982252524684268426846846846846849848418418414141841841984219848941984218942894298421984286289228927948728929829");
          

          这应该会给你想要的价值。

          【讨论】:

            【解决方案5】:

            根据documentation

            BigInteger(String val)

            将 BigInteger 的十进制字符串表示形式转换为 BigInteger。

            表示可以使用String来初始化BigInteger对象,如下sn-p所示:

            sum = sum.add(new BigInteger(newNumber));
            

            【讨论】:

              【解决方案6】:

              使用构造函数

              BigInteger(String val)

              将 BigInteger 的十进制字符串表示形式转换为 BigInteger。

              Javadoc

              【讨论】:

              • 我尝试了同样的方法,但遇到了问题,因为我错过了导入 java.math.BigInteger
              • 好的,来自整数:valueOf,来自字符串,构造函数,这个 API 缺少一些连贯性?
              猜你喜欢
              • 2017-04-15
              • 2012-12-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-12-12
              • 1970-01-01
              相关资源
              最近更新 更多