gpt4 book ai didi

java - 使用 BigInteger 绕过 Integer.toString()

转载 作者:搜寻专家 更新时间:2023-11-01 01:32:22 25 4
gpt4 key购买 nike

我想得到一个数的四次方的余数。这是我的代码:

static int testMod(int a, int mod) {

/* //This looks clear
BigInteger a4 = a;
return (a4.pow(4))%mod;
*/

//This works
String a2String = Integer.toString(a);
String mod2String = Integer.toString(mod);
BigInteger a4 = new BigInteger(a2String);
BigInteger modBigInt = new BigInteger(mod2String);
a4 = a4.pow(4);

return a4.remainder(modBigInt).intValue();
}

它工作正常,但转换为 String 似乎是不必要的,使用 % 运算符会比 a.remainder(b) 更简洁。是否可以重写它以使其更清晰?

最佳答案

您可以通过使用 BigInteger.valueOf(long) 将您的 int 转换为 来摆脱 String 的转换大整数。但是,您不能将 % 运算符应用于 BigInteger 操作数。如果可以,那么 BigInteger.remainder() 将不存在。另一方面,正如@LouisWasserman 所观察到的,BigInteger.modPow() 可以在一次调用中执行取幂和求余。

此外,正如您所知,BigInteger 支持方法链。如果你愿意,你可以在一条语句中完成所有事情,但我认为这是简洁和可读性之间的一个很好的折衷:

static int testMod(int a, int mod) {
BigInteger bigA = BigInteger.valueOf(a);
BigInteger bigMod = BigInteger.valueOf(mod);

return bigA.modPow(BigInteger.valueOf(4), bigMod).intValue();
}

关于java - 使用 BigInteger 绕过 Integer.toString(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38110271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com