社区讨论
我不李姐
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 条回复,欢迎继续交流。
正在加载回复...