目前,我开始读一本有关算术的书,因此我现在正在尝试一些非常简单的算法,以适应转换等问题。.在这个小班里,我想启用带进位功能的学校加法功能。
如何将生成的Int数组转换为int?我不知道如何将它们转换为足够的..
当前结果是[7、8、3、7、9、0、5、6],我想将这些数字合并为一个整数(78379056)。我有哪些可能性?
public class Addition {
public int[] addiere(int[] a, int[] b) {
int res = 0;
int[] c = new int[a.length];
for(int i = a.length-1 ; i>=0 ; i--) {
res = a[i]+b[i];
if(res>=10) {
c[i] = oneValue(res);
a[i-1]+=1;
} else c[i]=res;
System.out.println("a -- "+a[i]+" b -- "+b[i]+" c -- "+c[i]);
}
return c;
}
public int oneValue(int t) {
String res;
int val;
res=Integer.toString(t);
res = res.substring(res.length()-1);
val = Integer.parseInt(res);
return val;
}
public static void main(String[] args) {
int[] a = {3,4,6,8,9,1,2,4};
int[] b = {4,2,5,7,8,9,3,2};
Addition add = new Addition();
int[] result;
//returns an array of Integers
System.out.println(Arrays.toString(add.addiere(a, b)));
result = add.addiere(a, b);
//HERE should be a method to convert the result ( Array of Integers ) just into a normal integer
}
}
答案 0 :(得分:3)
给出数组
int arr[] = { 7, 8, 3, 7, 9, 0, 5, 6 };
您可以简单地做到:
long num = Long.parseLong(Arrays.stream(arr)
.mapToObj(String::valueOf)
.collect(Collectors.joining()));
输出
78379056
说明:
mapToObj(...)
中,我们将每个元素从int
转换为
String
使用valueOf
方法。Collectors.joining()
我们在这里使用长,以防万一该数字太大而无法包含在int中。
答案 1 :(得分:2)
您可以将数组转换为String并使用Integer.parseInt()
获得此结果,也可以使用简单的循环将数字乘以10及其位置指数相加:
int r = 0;
for (int i = 0; i < result.length; i++) {
r += result[i] * Math.pow(10, result.length - i - 1);
}
我更喜欢这种解决方案。
数组[7, 8, 3, 7, 9, 0, 5, 6]
的结果为78379056
。
此外,如果数字超出整数范围(long
),则应考虑使用int
而不是78379056
。
编辑:这是Integer.parseInt()
的解决方案:
StringBuilder builder = new StringBuilder();
for (int i : result) {
builder.append(i);
}
int r = Integer.parseInt(builder.toString());
或者,您也可以看看尼古拉斯·克的答案。
答案 2 :(得分:1)
最终,您可以将每个数字乘以10的幂,然后将它们加在一起。例如,此代码将返回“ 1234”。
int[] array = {1, 2, 3, 4};
int total = 0;
for(int i = 0; i < array.length; i++)
if(array[i] > 9 && array[i] < 0)
throw new IllegalArgumentException("Only use digits");
else
total += array[i] * Math.pow(10, array.length - i - 1);
System.out.println(total);
它在所有情况下都有效,带数字的情况除外。确保您已处理错误。
(对Integer.MAX_VALUE充满信心)
答案 3 :(得分:1)
public static void main(String[] args) {
int[] a = {7, 8, 3, 7, 9, 0, 5, 6};
int m = 1;
int r = 0;
for (int i=a.length-1; i>=0; i--) {
r = a[i] * m + r;
m = m * 10;
}
System.out.println(r);
}
打印:
78379056
答案 4 :(得分:0)
您可以使用BigInteger来保存大于int max大小的数字,并且可以避免NumberFormatException。
public static void main(String[] args) {
int[] ary = {2,1,4,7,4,8,3,6,4,7};
StringBuilder numBuilder = new StringBuilder();
for(int num:ary) {
numBuilder.append(num);
}
BigInteger maxInt = BigInteger.valueOf(Integer.MAX_VALUE);
BigInteger finalNum = new BigInteger(numBuilder.toString());
if(finalNum.compareTo(maxInt)>0) {
//number is more the max size
System.out.println("number is more than int max size");
}else {
int result = finalNum.intValueExact();
System.out.println(result);
}
}