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

时间:2013-05-07 10:09:55

标签: java arrays int

e.g。对于int n = 1234,我可以创建一个字符串(s.valueOf(n)),然后我会像这样定义数组:

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

有没有其他方法可以做到这一点不使用字符串而只使用整数?

5 个答案:

答案 0 :(得分:13)

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

numOfDigits = (int)(Math.log10(n)+1);

现在你做:

int[] array = new int[numOfDigits];

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

但请注意,在阅读该方法的文档时,您会注意到:

  

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

答案 1 :(得分:5)

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

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

 int[] array = new int[noOfDigits];

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

答案 2 :(得分:2)

使用log function查找号码。数字。

int size = (int)Math.log10(1234)+1;
int[] array = new int[size];

答案 3 :(得分:0)

根据我的理解,您可以执行以下操作来获取数字

    int n = 12345;
    int count = 1;
    while(n>10){
         n = n/10;
         count++; 
    }
    int[] array = new int[count];

答案 4 :(得分:0)

if (n>0){
    numberOfDigets = (int)(Math.log10(n)+1);
} 
else if (n < 0){
    numberOfDigets = (int)(Math.log10(Math.abs(n))+1);
} else {
    numberOfDigets = 1;
}

如果n大于零则使用Math.log10函数,如Maroun Maroun所写。如果n小于零,则使用Math.abs函数获取positiv值。如果要为 - 添加2而不是1分配空间。则else子句适用于n为零并将numberOfDigets设置为1的情况。

如果对java函数的额外调用无关紧要,请使用此代码。     if(n!= 0){         numberOfDigets =(int)(Math.log10(Math.abs(n))+ 1);     } else {         numberOfDigets = 1;     }

Math.abs(n)将始终返回n的正位版本。要注意的值是Integer.min_value,因为该值仍然是负面的,但这是另一个问题。