10000000000%10 在 Java 中返回 8

问题描述 投票:0回答:1

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

请帮忙

java data-structures linked-list modulo
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
© www.soinside.com 2019 - 2024. All rights reserved.