int和double都有一定的范围,数据太大时会出现溢出现象,所以当超大整数相加时如何处理,这时一个问题。
本文是通过链表的形式处理,先规定每个节点只能存放一个整数,如789链表表示为9->8->7,所以123+789表示为(3->2->1)+(9->8->7)这种形式,结果也以链表的形式表示,要输出时可以用字符串的形式输出。
public class LinkNode {
class Node{
int val;
Node next;
public Node(){
}
public Node(int val){
this.val = val;
}
}
public Node addTwoNumbers(Node l1, Node l2) {
Node root = new Node(0);
Node cursor = root;
int carry = 0;
while(l1 != null || l2 != null || carry != 0) {
int l1Val = l1 != null ? l1.val : 0;
int l2Val = l2 != null ? l2.val : 0;
int sumVal = l1Val + l2Val + carry;
carry = sumVal / 10;
Node sumNode = new Node(sumVal % 10);
cursor.next = sumNode;
cursor = sumNode;
if(l1 != null) l1 = l1.next;
if(l2 != null) l2 = l2.next;
}
return root.next;
}
/**
* 增加节点
* @param head
* @param num
*/
public void addNode(Node head, int num) {
if (head == null) {
head = new Node(num);
}
if (head.next == null) {
Node d = new Node(num);
head.next = d;
} else {
Node pred = head.next;
while (pred != null) {
Node d = pred.next;
if (d == null) {
d = new Node(num);
pred.next = d;
break;
} else {
pred = d;
}
}
}
}
}
关于如何把超大数据转化为链表和如何将结果链表打印出来的结果比较简单,在此省略