题目描述
谷学长有一个非常简单的问题给你,给你两个整数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 千位数相加的全部内容,更多相关东秦内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复