我是靠谱客的博主 美好小天鹅,最近开发中收集的这篇文章主要介绍东秦 1018 A+B again 千位数相加,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目描述

谷学长有一个非常简单的问题给你,给你两个整数A和B,你的任务是计算A+B。

输入描述

输入的第一行包含一个整数T(T<=20)表示测试实例的个数,然后2*T行,分别表示A和B两个正整数。注意整数非常大,那意味着你不能用32位整数来处理。你可以确定的是整数的长度不超过1000。

输出描述

对于每一个样例,你应该输出两行,第一行是"Case #:",#表示第几个样例,第二行是一个等式"A+B=Sum",Sum表示A+B的结果。注意等式中有空格。

样例输入

2
1
2
112233445566778899
998877665544332211

样例输出

Case 1:
1 + 2 = 3
Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110
---------------------------------代码
import java.util.ArrayList;
import java.util.Scanner;

public class demo {
    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        int T = sc.nextInt();
        int index =0;
        ArrayList<String> array=new ArrayList<>();

        while(T>0&&T<=20)
        { StringBuilder sb =new StringBuilder();
            String A= sc.next();
            String B= sc.next();
            T--;
            index++;
            sb.append("Case").append(" ").append(index).append(":").append("n");
            sb.append(A).append(" ").append("+").append(" ").append(B).append(" ").append("=").append(" ").append(process(A,B));
            array.add(index-1,sb.toString());

        }sc.close();

        for(String arr:array)
            System.out.println(arr);

    }
    public static  String  process(String A,String B) //千位数相加
    {                                                     
        char[] a =new char[1002];//字符A该存入的数组     
        char[] b=new char[1002];// 字符B该存入的数组
        char[] result =new char[1002];//存两数相加结果的数组
        int aa=A.length()-1;// 字符串A的长度
        int bb=B.length()-1;// 字符串B的长度
        int help[]=new int[1002];//辅助数组用于存两数相加大于10时的进1
        for(int i=a.length-1;i>=0;i--)//将字符串A存入字符数组a  倒着存
        {   if(aa>=0)
            a[i] =A.charAt(aa--);
        else break;
        }
        for(int i=b.length-1;i>=0;i--)//将字符串B存入字符数组b   倒着存
        {   if(bb>=0)
            b[i]=B.charAt(bb--);
        else break;}
        for(int i=a.length-1;i>=0;i--)//计算两数相加例如92+93
        {   int numA =(a[i]+help[i])-'0';//3
            int numB =b[i]-'0';//2

            if(numA==-48) numA=0;//a[i]+help[i]=0时 numA=-48 具体原因不知 调试出来的
            if(numA==-47) numA=1;//a[i]+help[i]=1时 numA=-47 具体原因不知 调试出来的
            if(numB==-48) numB=0;//b[i]=0时 numB=-48
            if(numA+numB==10||numA+numB>10) //俩位数相加大于等于10时 将1存入数组 如果i=1001,就存入help[1000]
                help[i-1] = '1' - '0';
            if(numA+numB>9) { //两数相加求余即可

                result[i]= (char) (((numA+numB)%10)+'0');


            }


            else if(numA+numB<=9&&numA+numB>=0){
        //正常相加
                result[i]= (char) ((numA+numB)+'0');
            }
            else break;

        }
        StringBuilder stringBuilder =new StringBuilder();
               
        for(int i=0;i<result.length;i++)//遍历结果数组
        {
            
            //如果9+10
            //最终结果会是0000000000000....019
            if (result[i]!=48){  //0的阿斯克码为48 一直到不等于0时 从此次i开始遍历一直到结束
                for (int j = i; j < result.length; j++) {
                    stringBuilder.append(result[j]);
                }
                break;//加完之后就break
            }else {//为0就跳过此次循环
                continue;
            }
        }
        if (stringBuilder.length()==0){//当0加0时 字符串都为空 添加0
            stringBuilder.append("0");
        }
        return stringBuilder.toString().trim(); //转为字符串 去掉首尾空格
    }
}

最后

以上就是美好小天鹅为你收集整理的东秦 1018 A+B again 千位数相加的全部内容,希望文章能够帮你解决东秦 1018 A+B again 千位数相加所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(74)

评论列表共有 0 条评论

立即
投稿
返回
顶部