出于某种原因处理大数字时,模数运算符并没有给我正确的输出,看看代码
double x = Math.pow(65,17) % 3233;
输出应为2790
但输出为887.0
我确定它的东西很傻但我无法绕过它。提前致谢
答案 0 :(得分:7)
Math.pow(65, 17)
的结果不能完全表示为double
,而是四舍五入到最接近的数字。
pow(a, b) % c
操作称为“模幂运算”。 Wikipedia page包含了很多关于如何计算它的想法。
这是一种可能性:
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;
}
答案 1 :(得分:1)
您可以像这样使用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