我不李姐
查看原帖
我不李姐
222609
07kzs楼主2022/11/8 08:36

为什么这份快速幂不过:

#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)。

#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;
}
2022/11/8 08:36
加载中...