Java总是给我错误的数字

Jan*_*pyc 0 java numbers

我写了这行代码:

System.out.println(Math.pow(7, 23) % 143);   // 7^23 mod 143
Run Code Online (Sandbox Code Playgroud)

我期望输出是,2但输出是93.0.有人知道我做错了什么吗?

Cos*_*atu 7

数字"溢出" double,这是Math.pow()预期和返回的.用一个BigInteger代替:

BigInteger.valueOf(7)
        .pow(23)
        .mod(BigInteger.valueOf(143))
Run Code Online (Sandbox Code Playgroud)

或者按照@Felk的建议一步完成:

BigInteger.valueOf(7)
        .modPow(BigInteger.valueOf(23), BigInteger.valueOf(143))
Run Code Online (Sandbox Code Playgroud)

  • BigInteger甚至有[modPow()](https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html#modPow%28java.math.BigInteger,%20java.math.BigInteger% 29)一步完成这一步 (5认同)