[英]Java; int[] to int
如何将整数数组转换为整数,但采用特殊方式?
例如,如何将{1,9,9,0}转换为1990?
这适用于任何大小的整数数组
int nums[] = { 1, 9, 9, 0 };
StringBuilder strNum = new StringBuilder();
for (int num : nums)
{
strNum.append(num);
}
int finalInt = Integer.parseInt(strNum.toString());
System.out.println(finalInt);
int[] array = {1,9,9,0};
int result = 0;
for(int i = 0; i < array.length; i++) result += Math.pow(10,i) * array[array.length - i - 1];
System.out.println(result);
Output: 1990
看到不必要的复杂解决方案(包括Math.pow
, String
等)感到很Math.pow
。即使是正则表达式和第三方库也出现了!
您只需要一个循环并乘以10:
int num = 0;
for (int a : arr) {
num = 10*num + a;
}
当然,这假设arr
的元素在0-9范围内; 但是无论如何,这种情况之外的正确行为还是无法定义的。
它还假定可以将数组的数字转换为整数而不会发生溢出。 但是由于该问题询问有关转换为整数的问题,因此溢出行为也未定义。
请注意,可以通过计算将num
移位多少位数来以类似于字符串串联解决方案的方式处理“ element> 9”的情况:
int num = 0;
for (int a : arr) {
if (a < 0) throw new IllegalArgumentException();
int i = a;
do {
num *= 10;
i /= 10;
} while (i != 0);
num += a;
}
我认为这不是处理元素中多个数字的最合适方法; 至少应指定行为。 我只是指出您不需要使用字符串来处理它。
我不确定使用Java,但使用伪.NET代码:
String value = "";
for (int i = 0; i < array.length; i++)
{
value += array[i]; // Build out the number as a string
}
int someInt = Integer.parseInt(value);
假设您在Integer[]
使用数字而不是原始int[]
并且具有Commons Lang Library,那么您可能会发现以下一行划线很有用
Integer[] array = {1, 9, 9, 0 };
System.out.println(Integer.valueOf(StringUtils.join(array)));
或者,如果整数太大而无法容纳int
使用BigInteger
Integer[] piDigits = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2,
3, 8, 4, 6, 2, 6, 4, 3, 3, 8, 3, 2, 7, 9, 5, 0, 2, 8, 8, 4, 1,
9, 7, 1, 6, 9, 3, 9, 9, 3, 7, 5, 1, 0, 5, 8, 2, 0, 9, 7, 4, 9,
4, 4, 5, 9, 2, 3, 0, 7, 8, 1, 6, 4, 0, 6, 2, 8, 6 };
System.out.println(new BigInteger(StringUtils.join(piDigits)));
采用:
public void turnArrToInt(int x[]){
for(int i = 0; i < x.length; i++){
number += x[i]*Math.pow(10,x.length-i-1);
}
这就是我的实现方式。 它接受每个元素,如果它是数组的第一个元素,则将其乘以10 ^(数组的长度-1-theCurrentElement),并将所有结果相加。 它适用于所有尺寸。 基本上将100乘以100,将10乘以10,依此类推。
例如:char = {1,2,3}将1乘以100 2乘以10 3乘以1,得到所有的总和并得到123。
Arrays.toString(nums).replaceAll("\\D+","");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.