社区讨论

我不李姐

P8813[CSP-J 2022] 乘方参与者 7已保存回复 24

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
24 条
当前快照
1 份
快照标识符
@lo7lm8jg
此快照首次捕获于
2023/10/27 03:49
2 年前
此快照最后确认于
2023/10/27 03:49
2 年前
查看原帖
为什么这份快速幂不过:
CPP
#include<bits/stdc++.h>
using namespace std;
long long ksm(long long a,long long b){
    long long ans=1;
    while(b>0){
        if(b&1){
            ans=ans*1ll*a;
            if(ans>1e9) return -1;
        }
        a=a*1ll*a;
        b>>=1;
    }
    return ans;
}
int main(){
    long long a,b;
    cin>>a>>b;
    cout<<ksm(a,b);
    return 0;
}
但是这份就可以:
解释一下(因为a,b均为正整数,所以,当a>1时,只需要循环b次,每次乘方再判断是否大于1e9,即可,不会TLE)。
CPP
#include<bits/stdc++.h>
using namespace std;
int main(){
   long long a,b;
    cin>>a>>b;
    if(a==1){
        cout<<1;
        return 0;
    }
    else if(a==0&&b==0){
        cout<<0;
    }else if(b==0){
        cout<<1;
    }else{
        long long ans=1;
        for(int i=1;i<=b;i++){
            ans=ans*a;
            if(ans>1e9){
                cout<<-1;
                return 0;
            }
        }
        cout<<ans;
    }
    return 0;
}

回复

24 条回复,欢迎继续交流。

正在加载回复...