分享
三行代码  ›  专栏  ›  技术社区  ›  Jackson

如何将一个大整数转换成连续两位数整数的数组?

  •  1
  • Jackson  · 技术社区  · 1 周前

    所以如果

    内景j=357642466853

    int[]digArray={35,76,42,46,68,53}

    int[] digArray = new int[intLength/2]   //intLength is just n
    
    for(int i = 0; i < intLength; i += 2) {         
            digArray[i/2] = (String.valueOf(j).charAt(i))    //Note this isn't complete as I don't even know how to concatenate on the second digit.
    }
    
    

    可能我需要创建一个字符串[],然后在完成后将其转换为int[]?

    2 回复  |  直到 1 周前
        1
  •  2
  •   Tim Biegeleisen    1 周前

    这里可以使用模数:

    long j = 357642466853L;
    long[] digArray = new long[(int)(Math.log10(j) / 2) + 1];
    
    for (int i=digArray.length - 1; i >= 0; --i) {
        digArray[i] = j % 100L;
        j /= 100;
    }
    
    System.out.println(Arrays.toString(digArray));
    

    [35, 76, 42, 46, 68, 53]
    
        2
  •  1
  •   WJS    1 周前

    还有另一种方法。

    for (long v : new long[]{ 357642466853L, 1234L,29228912L}) {
                System.out.println(v + " " + Arrays.toString(longToGroups(v)));
    }
        
    public static long[] longToGroups(long val) {
        return LongStream
                .iterate(
                    (long) (Math.pow(10,
                            (int) Math.log10(val) - 1)),
                    i -> i > 0, i -> i / 100)
            .map(i -> (val / i) % 100).toArray();
    }
    

    印刷品

    357642466853 [35, 76, 42, 46, 68, 53]
    1234 [12, 34]
    29228912 [29, 22, 89, 12]