如何在跟踪进位的同时获得两个数组的和(如java中的bigInt)?
我还在学习编程,我正在尝试添加两个数组,A和B,同时跟踪进位。数组都是如何在跟踪进位的同时获得两个数组的和(如java中的bigInt)?,java,arrays,bigint,Java,Arrays,Bigint,我还在学习编程,我正在尝试添加两个数组,A和B,同时跟踪进位。数组都是SIZE=20的,看起来像这样:A={0,0,…,n} 我下面的代码似乎不起作用,我一生都无法找出错误所在。例如,如果我添加 A={0,0,0…,1,2,3}作为数组和 B={0,0,0,…,7,8,9}作为一个数组,我得到的是802而不是912。 代码: 请帮忙 如注释中所述,您需要记住从一位到下一位的进位的值。此外,当没有数字溢出时,清除进位也很重要。最后,如果循环结束时设置了进位,则总和太大,无法放入数组中 static
SIZE=20
的,看起来像这样:A={0,0,…,n}
我下面的代码似乎不起作用,我一生都无法找出错误所在。例如,如果我添加
A={0,0,0…,1,2,3}
作为数组和
B={0,0,0,…,7,8,9}
作为一个数组,我得到的是802
而不是912。
代码:
请帮忙 如注释中所述,您需要记住从一位到下一位的
进位
的值。此外,当没有数字溢出时,清除进位也很重要。最后,如果循环结束时设置了进位,则总和太大,无法放入数组中
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;
}
每次启动while循环时,您都将
进位
初始化为0,然后将其添加到总和中。然后,您就不会对在if
语句中计算的carry
执行任何操作。(您可能希望声明进位
在循环之外。)您的任务是否要求您考虑数组可能以另一个进位结束在左侧,因此需要比两个原始进位多一个长度?例如:{9,9,9}+{9,9,9}={1,9,9,8}确保你没有在程序中从左到右进行计算,也没有从右到左进行计算。@MichaelBerry他还需要一个else
,如果没有进位
将其设置为0
。从技术上讲,既不需要if
也不需要else
。如果两者都被排除,整数运算将自行处理。在计算出的和中,carry=sum/10
始终是左位或零,而sum=sum%10
始终是右位。
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;
}