蓝桥杯备考----》快速幂算法之乘方
这道题就是用快速幂的算法,但是如果结果超过1e9的时候就要返回-1了,同时,我们也要防止a溢出,a大于1e9的时候及时退出,但是注意,我们不能在a*=a之后判断,毕竟,如果这是最后一次循环的话,结果可能已经正好存在ret里面了,这时候我们 突然返回可能会破坏我们的结果,这下面才是我们的正确代码
#include <iostream>
using namespace std;
typedef long long ll;
ll a,b;//a的b次幂
ll quickcalc()
{
ll ret=1;
while(b)
{
if(a>1e9) return -1;
if(b&1)
{
ret*=a;
}
if(ret>1e9) return -1;
b>>=1;
a*=a;
}
return ret;
}
int main()
{
cin >> a >> b;
ll r = quickcalc();
cout << r << endl;
return 0;
}