Mar*_*ius 1 java arrays integer
我如何将整数数组转换为整数,但是以一种特殊的方式?
例如,我如何将{1,9,9,0}转换为1990年?
Sha*_*awn 17
这适用于任何大小的整数数组
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);
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
Output: 1990
Run Code Online (Sandbox Code Playgroud)
这也影响到看到过于复杂的解决方案,涉及Math.pow,String等等。甚至正则表达式和第三方库做出个样子!
您只需要一个循环和乘以 10:
int num = 0;
for (int a : arr) {
num = 10*num + a;
}
Run Code Online (Sandbox Code Playgroud)
这当然假设 的元素arr在 0-9 范围内;但是无论如何,这种情况之外的正确行为是未定义的。
它还假设数组的数字可以转换为整数而不会溢出;但由于问题询问转换为整数,因此溢出行为也未定义。
请注意,您可以通过计算必须移位的数字以类似于字符串连接解决方案的方式处理“元素 > 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;
}
Run Code Online (Sandbox Code Playgroud)
我认为这不是处理元素中多个数字的最合适的方法;至少应该指定行为。我只是指出你不需要求助于字符串来处理它。
| 归档时间: |
|
| 查看次数: |
38158 次 |
| 最近记录: |