Java程序练习-长整数加法运算(一)

2014-11-24 03:02:58 · 作者: · 浏览: 0

长整数加法运算
时间限制: 2000ms内存限制: 2000kB
描述
问题描述:设计一个实现任意长的整数进行加法运算的演示程序。
基本要求:利用双向循环链表实现长整数的存储,每个结点含一个整形变量。任何整形变量的范围是 -(2^15 - 1)~(2^15 - 1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。
输入
-9999,9999(输入第一个加数)
1,0000,0000,0000(输入第二个加数)
输出
9999,0000,0001(输出结果,如果前面有多余的0应该去掉)
样例输入
-9999,9999 1,0000,0000,0000
样例输出
9999,0000,0001
参考代码


//import java.io.BufferedReader;
import java.io.IOException;
//import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class Main { www.2cto.com
public static void main(String[] args) throws IOException {
//BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
Scanner cin = new Scanner(System.in);
while(cin.hasNext()){
//String s1 = cin.readLine();
//String s2 = cin.readLine();
String s1 = cin.next();
String s2 = cin.next();
boolean minus_1 = false;
boolean minus_2 = false;
if(s1.contains("-"))
minus_1 = true;
if(s2.contains("-"))
minus_2 = true;
if(minus_1 && !minus_2){
calculate(s1,s2,'-',1);
}else if(!minus_1 && minus_2){
calculate(s2,s1,'-',1);
}else if(minus_1 && minus_2){
calculate(s1,s2,'+',2);
}else{
calculate(s1,s2,'+',3);
}
}
}
private static void calculate(String s1, String s2, char c, int kind) {
String s1a[] = s1.split(",");
String s2a[] = s2.split(",");
Listlist1 = new ArrayList();
Listlist2 = new ArrayList();
Listlist_temp = new ArrayList();
Listlist3 = new ArrayList();

boolean flag = false;
switch(kind){
case 1:
s1a[0] = String.valueOf(0 - Integer.parseInt(s1a[0]));
break;
case 2:
s1a[0] = String.valueOf(0 - Integer.parseInt(s1a[0]));
s2a[0] = String.valueOf(0 - Integer.parseInt(s2a[0]));
break;
case 3:
break;
}
int k = 0;
boolean pout = false;
for(int i = 0;i int n = Integer.parseInt(s1a[i]);
if(n > 0 || pout){
pout = true;
list_temp.add((n + k) % 10000);
}
k = n / 10000;
}
for(int i = list_temp.size() - 1;i >= 0;-- i){
list1.add(list_temp.get(i));
}
k = 0;
pout = false;
list_temp.clear();
for(int i = 0;i < s2a.length;++ i){
int n = Integer.parseInt(s2a[i]);
if(n > 0 || pout){
list_temp.add((n + k) % 10000);
pout = true;
}
k = n / 10000;
}
for(int i = list_temp.size() - 1;i >= 0;-- i){
list2.add(list_temp.get(i));
}
Iterator it1,it2;
if(list1.size() == 0){
list1.add(0);
}
if(list2.size() == 0){
list2.add(0);
}
int n = 0;
//System.out.println(list1);
//System.out.println(list2);
switch(c){
case '-':
if(list1.size() < list2.size()){
list_temp = list1;