#include <iostream>
using namespace std;
// Right to left binary
int quickPower( int base, int exp ){
int res = 1;
int product = base;
while( exp ){
if( exp & 1 ){
res *= product;
}
product *= product;
exp >>= 1;
}
return res;
}
int main(){
cout << quickPower( 3, 4 );
return 0;
}
// Left to right binary
int quickPower( int base, int exp ){
int temp = exp;
int comp = 1;
int res = 1;
while( temp ){
temp >>= 1;
comp <<= 1;
}
comp >>= 1;
while( comp ){
res *= res;
if( exp & comp )
res *= base;
comp >>= 1;
}
return res;
}
int main(){
cout << quickPower( 3, 5 );
return 0;
}