请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

LT2中整型溢出的问题

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} 导致溢出,计算结果错误。

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2019-08-20 00:38:20

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


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 慕勒9548534 #1
    初始化为BigInteger类型的话,似乎不能初始化为0,这是为什么呢
    回复 有任何疑惑可以回复我~ 2019-08-20 00:41:26
  • liuyubobobo 回复 提问者 慕勒9548534 #2
    什么叫“似乎不能”?请重新开问题清晰地描述你的问题。
    回复 有任何疑惑可以回复我~ 2019-08-20 00:42:24
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信