[英]How can I allocate memory for an array of digits (int) of a number with the length being equal to the number of digits of that number?
例如,对于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
增加1。
使用log function
查找号码。 的数字。
int size = (int)Math.log10(1234)+1;
int[] array = new int[size];
根据我的理解,您可以执行以下操作来获取数字位数
int n = 12345;
int count = 1;
while(n>10){
n = n/10;
count++;
}
int[] array = new int[count];
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)
将始终返回Math.abs(n)
。 值得注意的是Integer.min_value
因为该值仍然是负面的,但这是另一个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.