我仍在学习编程,我试图添加两个数组A和B,同时跟踪进位。数组全部为SIZE = 20
,看起来像这样:A = {0,0,..,n}
我下面的代码似乎无法正常工作,我无法终生发现错误所在。例如,如果我添加
A ={0,0,0...,1,2,3}
作为数组,并且
B ={0,0,0,...,7,8,9}
作为数组,我得到802
而不是912.
代码:
int index = SIZE -1;
int[] newBI = new int[SIZE]
while(index >=0)
{
int carry = 0;
int sum = A[index] + B[index] + carry;
if(sum >=10) {
carry = sum/10;
sum = sum %10;
}
newBI[index] = sum;
index--;
}
return newBI;
}
请帮助!
答案 0 :(得分:2)
正如注释中所指出的,您需要记住carry
从一个数字到下一个数字的值。另外,在没有数字溢出时清除carry
也很重要。最后,如果在循环结束时设置了carry
,则总和太大而无法放入数组中。
static int[] sum(int[] A, int[] B)
{
int index = SIZE -1;
int[] newBI = new int[SIZE];
int carry = 0;
while(index >=0)
{
int sum = A[index] + B[index] + carry;
if(sum >= 10) {
carry = sum/10;
sum = sum %10;
}
else
{
// important to clear the carry
carry = 0;
}
newBI[index] = sum;
index--;
}
if(carry == 1)
{
throw new ArithmeticException();
}
return newBI;
}