1)题目要求:请完成代码的编写,实现两个存放了超大整数数字的数组的求和,并将数值的值输出出来,例如222222222+3333333333=3555555555,注意开头的0不可输出。
(2)问题分析:本问题实际要完成的是对数组的操作,由于数组中每个数字是一个个的数组元素,看似独立,实则是需要作为一个整体来看待,由于进行加法运算时需要从个位开始加起,意味着对数组元素的访问需要从数组的最后一个元素往前进行,另外每一位上的数字经过加法运算后可能产生进位也是需要注意的,如果产生了进位,则当前结果数组的元素只保留和值的个位,并将产生的进位1先累加到a或者b的下一位上。另外计算过程中可能会存在进位而改变了原数组的内容,所以需要提前输出加法的式子,然后进行求和运算,再输出结果,而输出时,考虑到前面可能存在0,因此输出时需要找到第一个不为0的数字开始输出。
(3)算法设计:第一步,先输出加法式子,通过循环进行数组数字的输出,注意开头的0不可输出;第二步,需要根据当前已有的数组长度来创建一个存储目标结果的数组;第三步,建立循环,因为两个数组等长,所以只需要一个循环,从数组的最后一位往前遍历,对每一位元素进行计算,并判断结果是不是大于等于10,如果是则产生进位,结果数组中的元素只保留其个位,进位的1先累加到a或者b数组的下一个位上;第四步,计算完成后,再通过循环输出结果数组中的数字,同样开头的0不可输出。
(4)实验结果:
A.测试输入1:
a = {0, 9, 9, 7, 9, 4, 5, 6, 7, 2, 3, 4, 5, 6, 4, 7, 8, 9, 8, 7, 6, 9}
b = {0, 0, 5, 9, 1, 6, 4, 5, 6, 2, 3, 4, 5, 7, 2, 1, 3, 4, 0, 3, 2, 9}
预期输出1:
997945672345647898769+59164562345721340329=1057110234691369239098
public class HandleLargeNumber
{
public static void add(int[] a, int[] b)
{
int[] c = null;
c=new int [a.length];
int temp=0;//保存上一位的进数,默认个位数运算之前进数为0
for (int i= a.length-1;i>=0;i--)
{
c[i]=(a[i]+b[i]+temp)%10;
temp=(a[i]+b[i]+temp)/10;//我真是太聪明了
}
Jude_Print(a);
System.out.print("+");
Jude_Print(b);
System.out.print("=");
Jude_Print(c);
System.out.println();
}
public static void Jude_Print(int [] d)
{
for (int i=0;i< d.length;i++)
{
if (d[i]!=0)
{
for (; i < d.length; i++)
{
System.out.print(d[i]);
}
break;
}
}
}
public static void main(String[] args)
{
int[] a = {0, 9, 9, 7, 9, 4, 5, 6, 7, 2, 3, 4, 5, 6, 4, 7, 8, 9, 8, 7, 6, 9};
int[] b = {0, 0, 5, 9, 1, 6, 4, 5, 6, 2, 3, 4, 5, 7, 2, 1, 3, 4, 0, 3, 2, 9};
add(a, b);
}
}



