实现两个存放了超大整数数字的数组的求和,并将数值的值输出出来 java

问题

某个开发小组在进行项目开发时遇到了一个问题,他们需要进行一个超大的整数的求和运算,例如9239293919+67267627367,而int的范围远远不够,此时他们想到,可以将这些数字分别存放到两个长度相同的数组中,然后再根据其长度创建一个等长的数组,接下来就可以按照下标对数组的每一位来进行求和,最后可以得到一个保存了结果数据的数组。

问题分析:

本问题实际要完成的是对数组的操作,由于数组中每个数字是一个个的数组元素,看似独立,实则是需要作为一个整体来看待,由于进行加法运算时需要从个位开始加起,意味着对数组元素的访问需要从数组的最后一个元素往前进行,另外每一位上的数字经过加法运算后可能产生进位也是需要注意的,如果产生了进位,则当前结果数组的元素只保留和值的个位,并将产生的进位1先累加到a或者b的下一位上。另外计算过程中可能会存在进位而改变了原数组的内容,所以需要提前输出加法的式子,然后进行求和运算,再输出结果,而输出时,考虑到前面可能存在0,因此输出时需要找到第一个不为0的数字开始输出。

算法设计:

第一步,先输出加法式子,通过循环进行数组数字的输出,注意开头的0不可输出;

第二步,需要根据当前已有的数组长度来创建一个存储目标结果的数组;

第三步,建立循环,因为两个数组等长,所以只需要一个循环,从数组的最后一位往前遍历,对每一位元素进行计算,并判断结果是不是大于等于10,如果是则产生进位,结果数组中的元素只保留其个位,进位的1先累加到a或者b数组的下一个位上;

第四步,计算完成后,再通过循环输出结果数组中的数字,同样开头的0不可输出。

代码

public class Handle  {
    public static void add(int[] a, int[] b) {
        int[] c = null;
        c = new int[a.length];
        int temp = 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 = {1, 8, 9, 7, 0, 4, 3, 5, 8, 0, 4, 2, 7, 8, 5, 6, 8, 5, 8, 5, 9, 9};
 int[] b = {0, 2, 0, 0, 2, 8, 6, 8, 2, 1, 5, 3, 9, 6, 4, 0, 4, 2, 0, 1, 4, 9};
 add(a, b);
 }
}

运行结果

 

 

 

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值