Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Binary Exponentiation:
- eg x=2 , y=10
- we can also write it as : x=4 ie. base*base 2*2 and exponent=y/2 ie. 5 ie. overall 4^5
- we can also write it as : 4^5=4*(4^4)
- we can also write it as : 4*(4^4)=4*(16^2)
- we can also write it as : 4*256^1 {256 =16*16}
- Algo:
- Base and exponent
- if exponent is divisible by 2 then multiply base with base eg base*base
- if exponent is not divisible by 2 then multiply base in some variable eg. ans
- for example ans=1,base=5 and exponent=3 so answer is 125 then ans=1*5,base=5 and
- exponent=2(ie. exponent-1) so answer is 1*5*(5^2) =125
- if exponent>0 ans=x^exponent
- if exponenet<0 ans=1/(x^exponent)
- so we need to store absolute value of exponenet.But there is one catch,exponent can be integer [-2^31 to 2^31 -1 ]
- so we can keep maximum positive value in int variable is 2^31 -1 but exponent value can be -2^31 and it's
- abosulte 2^31 can give range overflow so use long long int.
- */
- class Solution {
- public:
- double myPow(double x, int p){
- if(p==0) return 1;
- bool sign=false;
- if(p<0) sign=true;
- long long int y=abs(p);
- double ans=1;
- while(y!=1){
- if(y%2==0){
- x=x*x;
- y/=2;
- }
- else{
- ans*=x;
- y--;
- }
- }
- if(sign) return 1/(ans*x);
- else return ans*x;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement