Java中long类型的模运算符是什么?

16

在Java中如何找出两个长整数的模数(%)?我的代码显示“Integer number too large”,然后是我尝试取模的数字。我尝试将其转换为长整数,但它没有起作用。我需要将其转换为BigInteger并使用余数方法吗?谢谢。

3个回答

22

% 操作符可以用于长整型。听起来你可能忘记在数字字面量的末尾加上 L,例如 123456789L。能否让我们看看你的代码?


好的,以下代码位于一个for循环内,total是BigInteger类型。 code total = total.add(BigInteger.valueOf(b(i)%1234567891011) code - Descartes
你需要在1234567891011的结尾添加L吗?假设b(i)也返回一个long。 - Marvo
把“L”加在1234567891011的末尾,就可以告诉编译器它是一个长整型字面量(否则编译器会将其视为整型字面量)。 - Daniel Lubarov

6

你只能使用最大为 2 147 483 647 的整数。如果你想使用更大的数字,比如 30 亿,你必须将其指定为长整型。

class Descartes {
    public static void main(String[] args) {
        long orig = Long.MAX_VALUE;
        long mod = orig % 3000000000; // ERROR 3000000000 too big
        long mod = orig % 3000000000L; // no error, specified as a long with the L
    }
}

请记住,您可以使用大写或小写的L,但建议使用大写,因为小写看起来与数字1非常相似。


0
你也可以尝试使用BigInteger类,它有一个remainder()方法,与%类似。

他的问题说明这已经是可能的,但他不想这样做。 - alternative
你说得对。我在他的问题中漏掉了这一点。但是我还是会保留我的回答,作为对他问“我是否需要将其转换为BigInteger并使用余数方法”的一个笨拙的回答。 - elekwent
读取我上面的答案的另一种方法是... 是的,您也可以尝试使用BigInteger类,它具有类似于%的remainder()方法。你看到我做了什么吗?我加了一个“是的”和两个逗号,现在完美地回答了他的问题。 - elekwent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接