由于某种原因,在处理大数时,模运算符没有给我正确的输出,看看代码
double x = Math.pow(65,17) % 3233;
输出应该是2790
但输出是887.0
我确信它有些愚蠢,但我无法绕过它。提前致谢
由于某种原因,在处理大数时,模运算符没有给我正确的输出,看看代码
double x = Math.pow(65,17) % 3233;
输出应该是2790
但输出是887.0
我确信它有些愚蠢,但我无法绕过它。提前致谢
的结果Math.pow(65, 17)
不能完全表示为 a double
,并且正在四舍五入到最接近的数字。
该pow(a, b) % c
操作称为“模幂运算”。维基百科页面包含很多关于如何计算它的想法。
这是一种可能性:
public static int powmod(int base, int exponent, int modulus) {
if (exponent < 0)
throw new IllegalArgumentException("exponent < 0");
int result = 1;
while (exponent > 0) {
if ((exponent & 1) != 0) {
result = (result * base) % modulus;
}
exponent >>>= 1;
base = (base * base) % modulus;
}
return result;
}
你可以像这样使用 int
int n = 65;
for (int i = 1; i < 17; i++)
n = n * 65 % 3233;
System.out.println(n);
或 BigInteger 之类的
System.out.println(BigInteger.valueOf(65).pow(17).mod(BigInteger.valueOf(3233)));
都打印
2790