【问题标题】:What is the faster way to conver BigInteger to array of int?将 BigInteger 转换为 int 数组的更快方法是什么?
【发布时间】:2014-05-10 15:52:47
【问题描述】:

我有 BigInt

BigInteger i = new BigInteger("5876934265987526278534978564378568734564937563487564327564376534875483753475");

我需要将其转换为[] int。我怎样才能快速做到这一点?

我的方法很慢

private static int[] convertDigitsToIntArray(java.math.BigInteger x) {
    String s = x.toString();
    int[] result = new int[s.length()];
    for (int i = 0; i < s.length(); i++) {
        result[i] = Integer.parseInt(String.valueOf(s.charAt(i)));
    }
    return result;
}

【问题讨论】:

  • 你必须使用Notepad++或EditPadPro并使用宏。我认为你不需要在这里编程。你需要定期录制宏并运行它。
  • 调用toString(),然后将每个字符转换为int? toString 的优化可能相当好。
  • @Alan Stokes 方法太慢了。
  • 如果 bigint 是 new BigInteger("-123"),你的结果 int[] 会是什么
  • 我没有负值。

标签: java biginteger


【解决方案1】:

将其转换为字符串,然后对字符进行迭代:

int[] getArr(BigInteger num)
{
    String str = num.toString();
    int[] arr = new int[str.length()];
    for (int i=0; i<arr.length; i++)
         arr[i] = str.charAt(i)-'0';
    return arr;
}

【讨论】:

    【解决方案2】:

    也许这会有所帮助...

    public static void main(String[] args) {
          BigInteger i = new BigInteger("5876934265987526278534978564378568734564937563487564327564376534875483753475");
          String iStr = i.toString();
          int[] intArray = new int[iStr.length()];
          for(int j=0; j<iStr.length(); j++) {
              intArray[j] = Integer.parseInt(String.valueOf(iStr.charAt(j)));
          }
      }
    

    【讨论】:

    • 它的解决方案太慢了。
    • 定义“太慢”。你量过吗?您必须达到哪些门槛?
    • 我认为这尽可能快,它使用的代码非常少,只需对每个字符进行子字符串化,您可以使用除以 1000000, 100000, 10000, 1000, 100, 10 但这会更慢
    • 这段代码和问题中的代码有什么区别?
    • 那是在我的 ans 被添加之后放的.. 没有别的.. ;)
    【解决方案3】:

    试试这个:

    private static int[] convertDigitsToIntArray(java.math.BigInteger x) {
        String s = x.toString();
        int[] result = new int[s.length()];
        for (int i = 0; i < s.length(); i++) {
            result[i] = s.charAt(i) - '0';
        }
        return result;
    }
    

    【讨论】:

    • Java 是按值传递的,因此在方法内分配对int[] result 的新引用将不起作用。
    【解决方案4】:

    您可以将 BigInteger 转换为字符串,获取该字符串的 char 数组并对其进行迭代:

    java.math.BigInteger source = new java.math.BigInteger("5876934265987526278534978564378568734564937563487564327564376534875483753475");
    
    char[] array = source.toString().toCharArray();
    int[] result = new int[array.length];
    for(int i=0; i<array.length; i++)
    {
        result[i] = array[i] - '0';
    }
    

    【讨论】:

      【解决方案5】:
      private static int[] convertDigitsToIntArray(java.math.BigInteger x) {
          String s = x.toString();
          int[] result = new int[s.length()];
          for (int i = 0; i < s.length(); i++) {
              // Change your code to subtract the char '0'
              result[i] = s.charAt(i) - '0';
          }
          return result;
      }   
      

      【讨论】:

        猜你喜欢
        • 2015-05-15
        • 2011-05-18
        • 2010-09-09
        • 1970-01-01
        • 1970-01-01
        • 2014-03-18
        • 2012-08-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多