【发布时间】:2011-08-24 03:52:43
【问题描述】:
如何将整数数组转换为整数,但以特殊方式?
例如,如何将 { 1, 9, 9, 0 } 转换为 1990?
【问题讨论】:
-
如果任何给定的数组元素超出范围
[0, 9],预期的行为是什么?这是作业吗?到目前为止,您尝试过什么?
如何将整数数组转换为整数,但以特殊方式?
例如,如何将 { 1, 9, 9, 0 } 转换为 1990?
【问题讨论】:
[0, 9],预期的行为是什么?这是作业吗?到目前为止,您尝试过什么?
看到不必要的复杂解决方案令人沮丧,涉及Math.pow、String 等。甚至正则表达式和第三方库也出现了!
你只需要一个循环并乘以 10:
int num = 0;
for (int a : arr) {
num = 10*num + a;
}
这当然假设arr的元素在0-9范围内;但无论如何,这种情况之外的正确行为是未定义的。
它还假设数组的数字可以转换为整数而不会溢出;但由于问题询问有关转换为整数的问题,因此溢出行为也未定义。
请注意,您可以用与string concatenation solution 类似的方式处理“元素> 9”的情况,方法是计算您必须将num 移动多少位数:
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;
}
我认为这不是处理元素中多个数字的最合适的方式;至少应该指定行为。我只是指出您不需要借助字符串来处理它。
【讨论】:
这适用于任何大小的整数数组
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);
【讨论】:
String,而不是整数。
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
【讨论】:
Arrays.toString(nums).replaceAll("\\D+","");
【讨论】:
假设您在 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)));
【讨论】:
我不确定在 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);
【讨论】:
用途:
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。
【讨论】: