LT2中整型溢出的问题
来源:5-2 测试你的链表程序
慕勒9548534
2019-08-19
bobo老师好 LT2问题中 除了逐位相加之外 我想尝试一下 计算结果后在转换成链表 但是遇到了整型溢出的问题,想请教老师该如何处理 代码如下
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//分别用来记录l1, l2代表的值
//注意这里时long而不是int 是因为测试用例中出现了大于int类型最大值的数
long m = 0;
long n = 0;
int k1 = 0;
int k2 = 0;
while(l1 != null) {
m += (long)(Math.pow(10, k1) * l1.val);
l1 = l1.next;
k1 += 1;
}
while(l2 != null) {
n += (long)(Math.pow(10, k2) * l2.val);
l2 = l2.next;
k2 += 1;
}
long t = m + n;
//拆分t 在这个过程中构建新链表
ListNode t_head = new ListNode(0);
ListNode cur = t_head;
if(t == 0) {
cur.next = new ListNode(0);
cur = cur.next;
return cur;
}
while(t > 0) {
int x = (int)(t % 10);
cur.next = new ListNode(x);
cur = cur.next;
t /= 10;
}
return t_head.next;
}
例如在测试用例中出现了这么一组数 {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1} 导致溢出,计算结果错误。
写回答
1回答
-
liuyubobobo
2019-08-20
这个问题本身就是不能先计算再转成链表。正是因为整型容纳不了那么大的数,所以采用链表来表示整数啊:)
继续加油!:)
022019-08-20
相似问题