1 条题解

  • 0
    @ 2026-10-18 23:28:30

    [CSP-J 2022] 乘方

    知识点

    整数运算、溢出判断

    解题思路

    当a=1时答案恒为1,直接返回。否则循环乘a,每次先检查当前结果是否大于10^9/a,若是则下一步一定超限;否则安全相乘。a至少为2,至多约30次乘法就会完成或超限。

    正确性说明

    对正数,result*a>10^9等价于result>floor(10^9/a),因此检查准确且乘法前不溢出。a>=2时乘积严格增大,超限后不可能重新回到范围内,提前输出-1正确。

    易错点

    等于10^9仍要输出;a=1且b=10^9必须直接返回;不要先做可能溢出的乘法再比较;不使用浮点pow判断边界。

    复杂度

    a=1时O(1),否则O(min(b,log_a(10^9)+1));额外空间O(1)。

    参考代码(GNU C++17)

    #include<bits/stdc++.h>
    using namespace std;
    int main(){long long a,b;cin>>a>>b;if(a==1){cout<<1<<'\n';return 0;}long long ans=1;for(long long i=0;i<b;++i){if(ans>1000000000LL/a){cout<<-1<<'\n';return 0;}ans*=a;}cout<<ans<<'\n';}
    
    • 1

    信息

    ID
    840
    时间
    1000ms
    内存
    128MiB
    难度
    进阶
    标签
    递交数
    0
    已通过
    0
    上传者