繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM