问题:我有一个简单的问题给你,给你两个整数,你的工作是计算A+B的和
输入:
第一行输入包括一个整数T(1<=T<=20)表示测试案例的数量。然后有T行,每行包括两个正数,A和B。注意到这两整数非常大,意味着你不能用32位的整数操作它们。你可以假设每个整数的长度不超过1000。
输出:
对于每一个案例,你应该输出两行。第一行是Case #:,第二行是A + B = ?,等号旁边都有空格。两个案例之间用空行隔起来。
Sample Input
2 1 2 112233445566778899 998877665544332211
Sample Output
Case 1: 1 + 2 = 3 Case 2: 112233445566778899 + 998877665544332211 = 1111111111111111110
import java.util.Scanner;
//用字符串实现大数相加
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int num=cin.nextInt();
int j=0;
for(j=0;j<num;j++){
String a = cin.next();
String b = cin.next();
Add(num,j,a, b);
}
}
public static void Add(int num,int j,String a, String b) { //加法函数
String a1 = invert(a); //因为加法都是从低位开始,所以把数字倒过来
String b1 = invert(b);
if (a1.length() < b1.length()) { //将长度较长的放在前面
String temp = a1;
a1 = b1;
b1 = temp;
}
int jin = 0; //进位值
char aa[] = a1.toCharArray();
char bb[] = b1.toCharArray();
int[] sum = new int[a1.length() + 1];
for (int i = 0; i < b1.length(); i++) { //两个数都存在的情况下的加法
int t = ((int) aa[i] - 48) + ((int) bb[i] - 48) + jin;
if (t >= 10) {// 进位
jin = t / 10;// 进位值
t = t % 10;// 留下的值
} else
jin = 0;
sum[i] = t;
}
for (int i = b1.length(); i < a1.length(); i++) { //当一个数字加完之后,剩下长的数字余下的部分的加法,考虑进位的不同
int t = jin + ((int) aa[i] - 48);
if (t >= 10) {// 进位
jin = t / 10;// 进位值
t = t % 10;// 留下的值
} else
jin = 0;
sum[i] = t;
}
System.out.println("Case "+(j+1)+":");
System.out.print(a+" + "+b+" = ");
if (jin != 0) {
sum[a1.length()] = jin; //判断最后一位是否有进位。
for (int i = a1.length(); i >= 0; i--) {
System.out.print(sum[i]); //按字符输出
}
} else {
for (int i = a1.length() - 1; i >= 0; i--)
System.out.print(sum[i]);
}
System.out.println();
if(j!=(num-1)){System.out.println();}
}
public static String invert(String str) {
StringBuilder newStr = new StringBuilder();
for (int i = str.length() - 1; i >= 0; i--)
newStr.append(str.charAt(i));
return newStr.toString();
}
}