计算不限定大小的两个数相加
发布日期:2021-05-14 13:57:42 浏览次数:18 分类:精选文章

本文共 1267 字,大约阅读时间需要 4 分钟。

前言

int类型数据是有一定大小范围的,在32位机子下:[-2147483648, 2147483647]。当我们进行超出范围的加法运算时,需要采取特殊的方法来处理这些溢出部分。

解题思路

将数字转换为String类型,再转换为char[]数组进行模拟人算:进位法。以LeetCode第二题为例,即给定两个逆序存储数字的链表,求它们的和。例如,3 4 2对应的数字342,加上5 6 4对应的465,得到结果为807。

值得注意的是,数字的顺序是逆序存储的,因此在加法运算时,需要逆序处理每一位数字。这个过程类似于手算加法,从最低位开始逐位加上进位。

题目

给出两个非空的链表,用来表示两个非负整数。它们的位数是按照逆序存储的,每个节点存储一位数字。假设这两个数都不会以0开头,要将它们相加,返回一个新的链表表示它们的和。

示例

输入:(2->4->3)+(5->6->4),输出:7->0->8(342 + 465 = 807)。

代码

public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int is_Ten = 0;
int l1Num = 0, l2Num = 0, tempSum;
ListNode resultListNode = null, tempListNode = null;

while (l1 != null || l2 != null) {  
if (resultListNode == null) {
resultListNode = new ListNode();
tempListNode = resultLoader;
} else {
tempListNode.next = new ListNode();
tempListNode = tempListNode.next;
}
l1Num = l1 == null ? 0 : l1.val;
l2Num = l2 == null ? 0 : l2.val;
tempSum = l1Num + l2Num + is_Ten;
is_Ten = tempSum / 10;
tempListNode.val = tempSum % 10;
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
}
if (is_Ten == 1) {
tempListNode.next = new ListNode();
tempListNode = tempListNode.next;
tempListNode.val = is_Ten;
}
return resultListNode;

}

测试结果

上一篇:Shell_重定向输出并永久后台执行命令:nohup command>文件路径 2>&1 &
下一篇:hash数组法长度不固定:集合

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年04月06日 12时14分31秒