我自认为已经在循环里特判了ans爆long long的问题,但感觉又不大对,因为乘一次就会爆,不知道怎么改,特判1了,代码如下:
#include<cstdio>
#include<iostream>
using namespace std;
bool flag=1;
unsigned long long f(long long a,long long b){
unsigned long long ans=1;
while(b){
if(b&1) ans=ans*a;
a=a*a;
b/=2;
if(ans>1e9){
printf("-1");
flag=0;
return 0;
}
}
return ans;
}
int main(){
long long a,b;
scanf("%lld%lld",&a,&b);
if(a==1){
printf("1");
return 0;
}
long long k=f(a,b);
if(flag==0) return 0;
else printf("%lld",k);
return 0;
}
```cpp