You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何将BigInteger类型参数传入pow方法求幂并返回末位数字

问题解决:Kotlin中BigInteger幂运算取最后一位

报错原因

java.math.BigInteger 提供的原生pow()方法仅支持接收Int类型的指数参数,你传入BigInteger类型的指数会触发类型不匹配错误。此外就算没有类型限制,直接计算超大指数的完整幂结果也会占用巨量内存,运行效率极低,没有实际可行性。

实现思路

只需要获取幂运算结果的最后一位,等价于计算 (base ^ exponent) mod 10,可以直接使用BigInteger内置的modPow()方法完成计算:

  • modPow方法的指数、模数参数均支持BigInteger类型,不需要把指数转换为Int
  • 内部采用快速幂算法实现,无需计算完整的幂结果,超大数运算效率极高

修正后可运行代码

import java.math.BigInteger

fun main(args: Array<String>) {
    println(lastDigit(BigInteger("1606938044258990275541962092341162602522202993782792835301376"),BigInteger("2037035976334486086268445688409378161051468393665936250636140449354381299763336706183397376")))
}

fun lastDigit(base: BigInteger, exponent: BigInteger): Int {
    // 处理指数为0的特殊场景,非0数的0次幂结果为1
    if (exponent == BigInteger.ZERO) {
        return 1
    }
    // 计算 (base^exponent) mod 10,结果就是幂的最后一位
    return base.modPow(exponent, BigInteger.TEN).toInt()
}

你的示例中底数末位为6,任意正整数次幂的末位都是6,运行代码后输出结果为6。


内容的提问来源于stack exchange,提问作者Xlorokoptiko Gia Gkazon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:51:03