解题思路
长度为 n 的 r 进制回文数由前半段唯一确定,按编号直接构造即可,不必枚举。
- 设前半段长度 h=⌊(n+1)/2⌋。n 为奇数时,最中间那一位也算在前半段里。
- 最高位只能取 1,2,…,r−1,其余 h−1 位每位可取 0,1,…,r−1。把这些回文数从小到大排好,第 t 个就对应把 t−1 按这种混合进制拆开。
- 令 x=t−1。从右往左,前半段的低 h−1 位依次取 xmodr,再令 x←⌊x/r⌋;最后最高位为 x+1。
- 把前半段左右对称抄到长度为 n 的数组 digits 上,得到完整的 r 进制表示。
- 用霍纳法则把 digits 转成十进制:val←val⋅r+digits[i]。答案可能超过 32 位整数,需使用 64 位。