Java 如何将两个int数组值相加?
我尝试将两个int数组相加以得到一个和。第一个数组包含000000000000000123456789,第二个数组包含000111111111。总数应为1111111234567900。我还尝试在不使用BigInteger或BigDecimal的情况下执行此操作。Java 如何将两个int数组值相加?,java,arrays,for-loop,Java,Arrays,For Loop,我尝试将两个int数组相加以得到一个和。第一个数组包含000000000000000123456789,第二个数组包含000111111111。总数应为1111111234567900。我还尝试在不使用BigInteger或BigDecimal的情况下执行此操作。 for(int i=0; i<number1.length;i++){ add= number1[i]+number2[i]; if(plus>=10){ sum[i-1]+=add/10
for(int i=0; i<number1.length;i++){
add= number1[i]+number2[i];
if(plus>=10){
sum[i-1]+=add/10;
sum[i] = add%10;
}else{
sum[i]=add;
}
}
for(inti=0;i=10){
总和[i-1]+=相加/10;
总和[i]=加上%10;
}否则{
总和[i]=相加;
}
}
此时产生的输出为0001111111111112345678100。如何修复代码,使8变为9?此代码应能正确地将大于10的数字向上移动,并保留较小的数字
int[] result = new int[number1.length+1];
for (int i=number1.length-1; i>=0;i--){
result[i+1] = number1[i] + number[i] + result[i+1];
if(result[i+1] >= 10){
result[i+1] -= 10; // it could never be more than 20 so this is ok and if it is 10 than it will still carry over to the next
result[i] = 1; // the ten carried to the next one
}
}
与Seek Addo的答案类似,但避免了在代码中发现的错误,这些错误会阻止应用程序正确地携带数字
这是我能想到的最简洁的方法,应该能给出正确的答案
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,4,5,6,7,9,0,0]或1111111111234567900
这有点管用。我可以想到这样的一些情况,比如如果数组像{9,9,9}和{9,9,9},
result
将是{9,9,8},而不是{1,9,9,8}这是一个小补丁,将作为活动留给读者。
public static void main(String []args){
int[] number1 = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9};
int[] number2 = {0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
int carry = 0, sum = 0;
int[] result = new int[number1.length];
for (int i = number1.length - 1; i >= 0 ; i--) {
sum = number1[i] + number2[i] + carry;
result[i] = sum%10;
carry = sum/10;
}
// [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 9, 0, 0]
System.out.println(Arrays.toString(result));
}
试试这个
int[] number = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9};
int[] number2 = {0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
int[] result = new int[number.length+1];
int carry = 0;
for (int i = number.length - 1; i >= 0; i--) {
result[i+1] = number[i] + number2[i] + carry;
if (result[i+1] > 9) {
carry = result[i+1] - 9;
result[i+1] -= 10;
}
else {
carry = 0;
}
}
System.out.println(Arrays.toString(result));
公认的答案是不好的。这是我的版本(支持不同的阵列大小):
公共静态int[]存储阵列(int[]n1,int[]n2){
int n1Size=n1.length-1,n2Size=n2.length-1,indexSum=n1Size>n2Size?n1Size+2:n2Size+2,slack=0,s;
int[]和=新的int[indexSum];
while(true){
如果(n1Size<0&&n2Size<0)
打破
s=(n1Size<0?0:n1[n1Size--])+(n2Size<0?0:n2[n2Size--])+松弛;
若(s>9){
总和[--指数]=s%10;
松弛度=s/10;
}否则{
总和[--指数]=s;
松弛=0;
}
}
如果(松弛!=0)
总和[0]=松弛;
回报金额;
}
什么是plus
?这不是我们表示数组的方式。000000000000123456789
中有多少个元素?plus是一个整数,总共有25个元素结果[i]-10代码>?int[]结果
。无法检查空值。请在提交之前编译代码。]。这段代码有很多编译错误。您应该尝试编译并运行代码。我之前的评论显示,循环的代码从0变为1号。长度为1
。len(结果)=len(数字1)。行结果[i+1]
将抛出一个ArrayIndexOutOfBoundsException
。
public static int[] sumIntArrays(int[] n1, int[] n2) {
int n1Size = n1.length - 1, n2Size = n2.length - 1, indexSum = n1Size > n2Size ? n1Size + 2 : n2Size + 2, slack = 0, s;
int[] sum = new int[indexSum];
while (true) {
if (n1Size < 0 && n2Size < 0)
break;
s = (n1Size < 0 ? 0 : n1[n1Size--]) + (n2Size < 0 ? 0 : n2[n2Size--]) + slack;
if (s > 9) {
sum[--indexSum] = s % 10;
slack = s / 10;
} else {
sum[--indexSum] = s;
slack = 0;
}
}
if (slack != 0)
sum[0] = slack;
return sum;
}