e.g。对于int n = 1234
,我可以创建一个字符串(s.valueOf(n))
,然后我会像这样定义数组:
int[] array = new int[s.length()]; //this allocates memory for an array with 4 elements
有没有其他方法可以做到这一点不使用字符串而只使用整数?
答案 0 :(得分:13)
您可以使用Math#log10查找位数。
numOfDigits = (int)(Math.log10(n)+1);
现在你做:
int[] array = new int[numOfDigits];
请注意,如果n = 1999
,numOfDigits
将为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
,因为该值仍然是负面的,但这是另一个问题。