【问题标题】:How can I turn a large integer into an array of successive two-digit integers?如何将大整数转换为连续两位整数的数组?
【发布时间】:2020-09-17 01:52:50
【问题描述】:

我想取一个 n 位整数 j(其中 n 是 2 的幂)并将其转换为 int[ ],其中每个 int[ i ] 是由 j 的连续数字设置的两位整数。

如果

int j = 357642466853

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

我从以下路线开始,但陷入了困境。如果我使用 String.valueOf 或 .charAt 它最终会将这些各自的数据类型发送到数组,即使我希望它是一个 int[]。

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[]?

谢谢。

【问题讨论】:

  • 如果有奇数位数怎么办?
  • 另外,357642466853 对于整数来说太大了。

标签: java arrays


【解决方案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]

【讨论】:

  • 357642466853 对于整数来说太大了。另外,intLength 是什么?
  • @Aniox 我修好了。我想永远不要完全相信 OP 中的代码。
  • 您也从未定义变量Arrays。 ;)
  • @Aniox 是的,不清楚,我之前设置 intLength 等于日志项
  • @smac89 ...关键是要获取数组中buckets的数量。由于每个桶包含两个位,因此我们要将输入数字的长度除以二。
【解决方案2】:

还有另一种方法。

for (long v : new long[]{ 357642466853L, 1234L,29228912L}) {
            System.out.println(v + " " + Arrays.toString(longToGroups(v)));
}
    
public static long[] longToGroups(long val) {
    int exp = (int)Math.log10(val);
    exp -= (exp % 2); // adjust for odd length longs
    long start =(long)(Math.pow(10,
                exp));
    return LongStream
            .iterate(
                start,
                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]

【讨论】:

  • 这不适用于像333L这样的奇数长度输入
  • 并非每个 2 的幂都有偶数位数。例如28128512
  • 哦,是的,错过了??
  • 哦,但是等等:2^0 是 1
  • 这可能就是 OP 的意思 TBH。 2^0 是唯一的奇数
猜你喜欢
  • 1970-01-01
  • 2020-05-25
  • 2022-11-10
  • 2023-03-28
  • 2012-06-02
  • 2012-04-14
  • 1970-01-01
  • 2013-02-01
  • 1970-01-01
相关资源
最近更新 更多