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

这个问题本身就是不能先计算再转成链表。正是因为整型容纳不了那么大的数,所以采用链表来表示整数啊:)


继续加油!:)

0
2
liuyubobobo
回复
慕勒9548534
什么叫“似乎不能”?请重新开问题清晰地描述你的问题。
2019-08-20
共2条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程