#include<bits/stdc++.h>
using namespace std;
int main()
{
long long a,b;
cin>>a>>b;
if(pow(a,b)<=1000000000&&pow(a,b)>=0)cout<<fixed<<setprecision(0)<<pow(a,b);
else cout<<-1;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 1e9;
typedef unsigned long long ULL;
int a,b;
ULL qmi(int a, int b)
{
ULL res = 1;
while (b)
{
if (b & 1) res = res * a ;
if(res > N) return 0;
a = a * (ULL)a;
b >>= 1;
}
return res;
}
int main(){
scanf("%d%d", &a, &b);
int ans = qmi(a,b);
if(ans == 0) ans=-1;
printf("%d",ans);
return 0;
}
取对数
orz
补充一下简单的快速幂
请问这种方法和简单直接相乘,差距在哪?研究了一下没看懂运算方法
对于求a^b,时间复杂度从o(b)降到o(logb),本质就是对b进行二进制优化
### 感谢分享
fixed 及后面那个有什么用啊
小数点位数
好的,谢谢