大数相加 java pta基础练习

在Java语言中,整数相加受到了位数的限制,请实现两个超大整数的加法。

输入格式:

两个超大整数,由于超出了范围,所以是以字符串的方式存储的。

输出格式:

输出两个超大整数相加的结果。

输入样例:

12345678909876543210
98765432101234567890

结尾无空行

输出样例:

在这里给出相应的输出。例如:

12345678909876543210+98765432101234567890=111111111011111111100

结尾无空行

下面展示实现代码(代码里面有注释):


import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String s1 = sc.nextLine();
        String s2 = sc.nextLine();
        int max,jinwei = 0,f=0;
        if (s1.length() >= s2.length()){
            max = s1.length();
        }
        else {
            max = s2.length();
        }     //第一步,找出两个字符串中较长的一个并记录,方便下面设置数组长度
        int[] a1 = new int[max+1];
        int[] a2 = new int[max+1];
        int[] a3 = new int[max+1];    //第二步,设置三个长度相同的数组,且长度均为字符串长度最大那个+1(方便结果进位),a1,a2为字符串转换后的数组,a3为结果数组
        for (int i = max ,k = s1.length() - 1; i >= max+1-s1.length(); i--){
            a1[i] = s1.charAt(k--) - '0';
        }
        for (int i = max ,k = s2.length() - 1; i >= max+1-s2.length(); i--){
            a2[i] = s2.charAt(k--) - '0';
        }      //第三步,将字符串转换为数组
        for (int i = a3.length-1; i >= 0; i--){
            a3[i] = (a1[i] + a2[i] + jinwei) % 10; //结果数组中最终实际记录的数字
            jinwei = (a1[i] + a2[i] + jinwei) / 10;  // 进位数
        }  //第四步,开始计算;注意结果数组中最终实际记录的数字和进位数
           //前四步,计算就已经完成了,后面只是打印结果
        for (int i = 0; i < a1.length; i++){
            while(a1[i] == 0 && f == 0){
                i++;
            }//这一步主要是防止打入数组开头的初始化的0,毕竟有些数组位置没有用到。用标志法来完成,有点愚蠢,欢迎各位读者提出自己的办法来取消打印数组开头的0
            f = 1;//f即标志
            if (f == 1){
                System.out.print(a1[i]);
            }
        }
        f = 0;//注意标志要清0
        System.out.print("+");
        for (int i = 0; i < a2.length; i++){
            while(a2[i] == 0 && f == 0){
                i++;
            }
            f = 1;
            if (f == 1){
                System.out.print(a2[i]);
            }
        }//同样的方法打印
        System.out.print("=");
        f=0;
        for (int i = 0; i < a3.length; i++){
            while(a3[i] == 0 && f == 0){
                i++;
            }
            f = 1;
            if (f == 1){
                System.out.print(a3[i]);
            }
        }//同样的方法打印
    }
}

完成大数相加,其实也可以不用定义三个一样长的数组,只需要这三个数组的右对齐就可以了,只不过设置三个一样长的数组可以防止思路不清晰。在打印环节也可用增强for循环,代码更简洁。此处未作展示。大数相加考点在数组的运用,完成了大数相加,思路清晰的友友们可以完成一下大数相乘,有一定难度。欢迎各位提出意见和建议。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值