Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在跟踪进位的同时获得两个数组的和(如java中的bigInt)?_Java_Arrays_Bigint - Fatal编程技术网

如何在跟踪进位的同时获得两个数组的和(如java中的bigInt)?

如何在跟踪进位的同时获得两个数组的和(如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

我还在学习编程,我正在尝试添加两个数组,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 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; 
}