Q ) 要反转两个链表,将它们相加并返回总和的反转链表` https://leetcode.com/problems/add-two-numbers/
class Solution
{
public long reverse(long num)
{
long ans = 0;
while(num > 0)
{
ans = ans*10 + (num%10);
num /= 10;
}
return ans;
}
public ListNode addTwoNumbers(ListNode l1, ListNode l2)
{
long num1 = 0;
long num2 = 0;
while(l1 != null)
{
num1 = num1*10 + l1.val;
l1 = l1.next;
}
while(l2 != null)
{
num2 = num2*10 + l2.val;
l2 = l2.next;
}
num1 = reverse(num1);
num2 = reverse(num2);
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
long sum = num1+num2;
System.out.println("sum = " + sum);
int l = (int)sum%10;
sum /= 10;
System.out.println("l = " + l);
System.out.println("sum = " + sum);
ListNode head = new ListNode(l);
ListNode l3 = head;
while(sum > 0)
{
l = (int)sum%10;
System.out.println("l = " + l);
System.out.println("sum = " + sum);
sum/=10;
ListNode temp = new ListNode(l);
l3.next = temp;
l3 = l3.next;
}
return head;
}
}
输入:
[9] [1,9,9,9,9,9,9,9,9,9]
输出:
数字1 = 9 数字2 = 9999999991
总和 = 10000000000 l = 8 (这里为什么是10000000000%10=8?)
总和 = 1000000000 l = 0
总和 = 1000000000 l = 0
总和 = 100000000 l = 0
总和 = 10000000 l = 0
总和 = 1000000 l = 0
总和 = 100000 l = 0
总和 = 10000 l = 0
总和 = 1000 l = 0
总和 = 100 l = 0
总和 = 10 l = 1
总和=1
请帮忙
int l = (int)sum%10;
问题就在这里。您首先将 long 变量转换为 int,然后计算余数。您可能想查看原始数据类型的存储大小。那里写着以下内容:
int 类型也称为整数,可保存各种非小数数值。
具体来说,Java 使用 32 位内存来存储它。换句话说, 它可以表示从 -2,147,483,648 (-231) 到 2,147,483,647 的值 (231-1).
换句话说,因为您将大于支持的数字转换为 int,所以您会丢失数据。要解决此问题,请在找到余数后进行强制转换:
int l = (int)(sum % 10)
或者,更好的是,只需将变量设为 long。
long l = sum % 10