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

我想得到一个数字的剩余四次幂.这是我的代码:

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转换为BigInteger来消除通过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() - 代码日志