先说最基本的,肯定数组存每一位了
读入字符串,反转,变成int型数组,在进行相加操作,此处两个思路,一种是把两个数组都补齐到最长的那个数组,空位补0(我用的),另外一种,计算小位数组,超长后判断进位直接赋值(还没写)
代码
import java.util.Scanner;
public class Main {
/*
* No 1002
* 2015/7/20
*/
static int[] a1;
static int[] b1;
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int T ;
String a, b ;
T = s.nextInt();
for (int i=0; i<T;i++ ) {
a = s.next();
b = s.next();
a1 = new int[a.length()];
b1 = new int[b.length()];
a1=change(a);
b1=change(b);
System.out.println("Case "+(i+1)+":");
System.out.print(a+" + "+b+" = ");
plus(a1,b1);
if (i+1!=T) {
System.out.println();
}
}
}
// 数组反转并变成int型
public static int[] change(String s) {
int[] res = new int[s.length()];
for (int i = 0; i < s.length(); i++) {
res[s.length()-1-i] = s.charAt(i) - '0';
}
return res;
}
public static void plus(int a1[],int b1[]) {
int temp =0;//进位
int count1;//需要相加的位数 结果数组的位数
count1 = a1.length<=b1.length?b1.length:a1.length ;
int[] res = new int[count1+1] ;
int[] a = new int[count1];
int[] b = new int[count1];
// 重构两个数组,补齐0
if (a1.length>b1.length) {
for (int i = 0; i < b1.length; i++) {
a[i] = a1[i] ;
b[i] = b1[i] ;
}
for (int i = b1.length; i < a1.length; i++) {
a[i] = a1[i] ;
b[i] = 0 ;
}
} else {
for (int i = 0; i < a1.length; i++) {
a[i] = a1[i] ;
b[i] = b1[i] ;
}
for (int i = a1.length; i < b1.length; i++) {
a[i] = 0 ;
b[i] = b1[i] ;
}
}
for (int i = 0; i < a.length; i++) {//两位相加
temp=(res[i]+a[i]+b[i])>9?1:0 ;//是否进位
if (temp==1) {//需要进位
res[i] = a[i]+b[i]+res[i]-10 ;
} else { //不需要进位
res[i] = a[i]+b[i]+res[i] ;
}
res[i+1] +=temp;
}
// 去除前导0
if (res[res.length-1]!=0) {
System.out.print(res[res.length-1]);
}
// 打印结果
for (int i = res.length-2; i >-1; i--) {
System.out.print(res[i]);
}
System.out.println();
}
}
Ps:格式说明,所有的输出都要打印一个空行除了最后一个
即
2
Case 1:
1 + 2 = 3
//空行
Case 2:
3 + 4 = 7
//没有空行,另外注意英文冒号