例如,int n = 1234
我可以创建一个字符串(s.valueOf(n))
,然后我会像这样定义数组:
int[] array = new int[s.length()]; //this allocates memory for an array with 4 elements
有没有其他方法可以在不使用字符串且仅使用整数的情况下做到这一点?
您可以使用Math#log10来查找位数。
numOfDigits = (int)(Math.log10(n)+1);
你现在做:
int[] array = new int[numOfDigits];
请注意,如果n = 1999
,numOfDigits
将为 4。因此,您正在为 4 个整数而不是 1999 个整数分配内存。
但请注意,在阅读该方法的文档时,您会注意到:
如果参数为正零或负零,则结果为负无穷大。
我假设你在谈论 Java,所以:
int value = myValue;
for (int noOfDigits = 1; Math.abs(value) >= 1; ++noOfDigits) {
value /= 10;
}
int[] array = new int[noOfDigits];
如果数字为负数,这不包括前导符号的空间,但您可以轻松测试此条件并加noOfDigits
一。
用于log function
查找编号。位数。
int size = (int)Math.log10(1234)+1;
int[] array = new int[size];
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 大于零,则使用 Maroun Maroun 所写的 Math.log10 函数。如果 n 小于零,则使用 Math.abs 函数获取正值。如果要为 - 分配空间,则添加 2 而不是 1。 else 子句适用于 n 为零并将 numberOfDigets 设置为 1 的情况。
如果对 java 函数的额外调用无关紧要,请使用此代码。if (n != 0){ numberOfDigets = (int)(Math.log10(Math.abs(n))+1); } 其他 { numberOfDigets = 1; }
Math.abs(n)
将始终返回 n 的正数版本。需要注意的价值是Integer.min_value
因为价值仍然是负面的,但这是另一个问题。
根据我的理解,您可以执行以下操作来获取位数
int n = 12345;
int count = 1;
while(n>10){
n = n/10;
count++;
}
int[] array = new int[count];