概述
题目描述
谷学长有一个非常简单的问题给你,给你两个整数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 千位数相加所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复