如何为数字的数字数组(int)分配内存,其长度等于该数字的位数?

con*_*ant 4 java arrays int

例如,因为int n = 1234我可以创建一个字符串(s.valueOf(n)),然后我会像这样定义数组:

int[] array = new int[s.length()]; //this allocates memory for an array with 4 elements
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以不使用字符串而只使用整数?

Mar*_*oun 13

您可以使用Math#log10查找位数.

numOfDigits = (int)(Math.log10(n)+1);
Run Code Online (Sandbox Code Playgroud)

你现在做:

int[] array = new int[numOfDigits];
Run Code Online (Sandbox Code Playgroud)

注意,如果n = 1999,numOfDigits将是4.所以你要为4个整数而不是1999整数分配一个内存.

但是在阅读方法文档时要小心,你会注意到:

如果参数为正零或负零,则结果为负无穷大.


Ste*_*ppo 5

我假设你在谈论Java,所以:

 int value = myValue;
 for (int noOfDigits = 1; Math.abs(value) >= 1; ++noOfDigits) {
     value /= 10;
 }

 int[] array = new int[noOfDigits];
Run Code Online (Sandbox Code Playgroud)

如果数字为负数,则不包括前导符号的空格,但您可以轻松测试此条件并增加noOfDigits1.