Java 纸笔乘法

Java 纸笔乘法,java,arrays,long-integer,Java,Arrays,Long Integer,我正在写一个纸笔相乘的程序。我使用2个嵌套for循环在长值的2d数组上相乘。我想在工作区中添加最后一个字符,然后添加第一个数字作为进位 我如何获得它,以便当内部循环完成执行时,它在下一组数字的第一列中创建一个零。然后,如果是第二次,添加两个零等,每次增加一个零的数量。当我开始工作时,我可以把数组加起来 输出: 84882000000000000000 26228000000000000000 92946000000000000000 6866400000000

我正在写一个纸笔相乘的程序。我使用2个嵌套for循环在长值的2d数组上相乘。我想在工作区中添加最后一个字符,然后添加第一个数字作为进位

  • 我如何获得它,以便当内部循环完成执行时,它在下一组数字的第一列中创建一个零。然后,如果是第二次,添加两个零等,每次增加一个零的数量。当我开始工作时,我可以把数组加起来
输出:

    84882000000000000000
    26228000000000000000
    92946000000000000000
    68664000000000000000
代码:


如果我理解正确,您需要在内部循环的右大括号后面添加一行-类似于

if(workspaceArray.size > i + 1){  //Avoids ArrayIndexOutOfBoundsException
   workspaceArray[i+1][0] = 0;
}

更明确地说,在下一行第一次执行内部for循环之后,我希望第一个值为0,其他所有值都添加到该值的末尾(而不是用0覆盖第一个索引)。然后对于第二行,我希望它前面是两个零,然后加上数字。好的,保持循环的迭代次数计数,从0开始,在内部循环结束时更新。在循环外部,获取下一个数组,并根据需要添加足够多的0。然后你需要将这个数字添加到你的其他索引hanks中,尝试它,更新原始帖子,获取indexoutofbounds:EJust发现它-将你的for条件更改为:for(int i=numberTwo.length-1,rowNum=numberOfZeros;i>=0;i--,rowNum++){。问题是您将零的数量添加到rowNum n次,而不是一次!
int numberOfZeros = 0;
        for (int i = numberTwo.length-1, rowNum = 0; i >= 0; i--, rowNum+=numberOfZeros){

            for (int j = numberOne.length-1, columnNum = 0; j >= 0; j--, columnNum++){
                System.out.println("Multiplying: "+numberTwo[i]+" and "+numberOne[j]);
                long value;

                if (carry == 0){
                    value = numberTwo[i]*numberOne[j];
                }else{
                    value = numberTwo[i]*numberOne[j]+carry;
                }
                //System.out.println("A "+value);
                long numberForWorkspace = extractLast(value);
                System.out.println("adding "+numberForWorkspace+" to the workspace at "+rowNum+" "+columnNum);
                workspaceArray[rowNum][columnNum] = numberForWorkspace; 
                //carry = extractAllButLast(value);


            }
            numberOfZeros++;
if(workspaceArray.size > i + 1){  //Avoids ArrayIndexOutOfBoundsException
   workspaceArray[i+1][0] = 0;
}