You need to enable JavaScript to run this app. C++区间幂数查询实现:代码逻辑疑问及更优解法咨询
优惠活动
大模型
产品
解决方案
定价
更多

C++区间幂数查询实现:代码逻辑疑问及更优解法咨询

问题1解答

自定义Power函数的作用是判断输入的number是不是base的整数次幂,符合条件就返回对应指数,否则返回0。

  • 用log计算是利用对数换底公式:数学上,以base为底number的对数等于ln(number)/ln(base),如果number刚好是base的n次方,这个计算结果理论上等于整数n。
  • 加0.5是为了修正浮点数计算的精度误差:log计算结果是浮点数,比如本来理论值是6,可能因为运算精度问题得到5.999999999或者6.000000001,加0.5之后再转int(C++中int转换会截断小数部分),就相当于做了四舍五入,能拿到正确的整数值。
  • 最后用pow(base, power) == number做校验,就是怕浮点数误差导致算出的指数不对,只有验证通过才返回指数,否则返回0。

问题2解答

肯定会漏判,完全不能覆盖所有场景。
题目中b的上限是1000000,仅平方数的底数最大就可以到1000(因为1000²=1000000),现在代码只遍历底数2到10,那11²=121、12²=144……999²=998001这些符合要求的幂数都会被漏掉,更别说底数大于10的更高次幂了。

问题3解答

有更简单高效的实现方法,还能避免浮点数精度问题:
1000000范围内最大的指数是19(219=524288,220=1048576超过1000000),我们可以从最高指数往最低指数遍历(这样第一次记录到的数就是指数最大的形式,符合题目要求):

  • 先开一个长度1000001的数组,用来记录每个数对应的底数,初始全部标记为未找到。
  • 指数n从19遍历到2:
    • 底数x从2开始,循环用整数乘法计算x的n次方,一旦结果超过1000000就停止当前指数的遍历。
    • 如果计算出的幂数还没被标记过,就把它的底数记录下来,后续低指数遍历到同一个数的时候不需要修改,保证保留最大指数的形式。
  • 最后遍历区间[a,b],把有记录的数按要求的格式输出即可。

内容的提问来源于stack exchange,提问作者user10203585

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 16:09:02