## Iam3R 24

Hi,
i have written a program to find the power of two numbers using iteration.

The problem here is that to return the correct out put for even powers but not for odd powers.
b = base , e = expo ,p= power( b, e);;

for even powers the statements in the if ( e % 2 == 0) are enough.
for odd powers we need to perform one extra multiplication with base.

but i am unable to control the if and else properly.

if i control else it will become a probelm in if or vice versa.

i want to perform the power with order ( log n ) and order (1).

``````int power( int b , int e)
{
int  p = 0;
if ( e < 0 )
return NEG_POWER;

if ( e == 0)
return 1;
if ( b == 0 )
return 0;
while ( e )
{
if ( e % 2 == 0) {
p = b*b;
e/=2;
}

else if ( e % 2 == 1 ) {
p = b*p;
}
}
}``````

i am trying foll way:
but its a problem in if for odd powers.

``````int e2 = e ; // at the start
else if ( e % 2 == 1 ) {
if ( e2 % 2 == 0)
return p;
else {
p = b*p;
e /= 2;
}
}``````

## Ancient Dragon 5,243

Why does it require such complicated code just to raise b^e using iteration? It's just a simple loop. Work the math out on paper then code it. You don't need % or / operators. Just * operator and a simple for loop without those if statements.

>>i want to perform the power with order ( log n ) and order (1).
My solution may or may not meet that requirement.

## nezachem 616

``````else if ( e % 2 == 1 ) {
p = b*p;
e -= 1;
}``````

## Iam3R 24

``````else if ( e % 2 == 1 ) {
p = b*p;
e -= 1;
}``````

p is getting overwritten here how will we add that here.

``````if ( e % 2 == 0) {
p = b*b;
e/=2;
}``````

## nezachem 616

p is getting overwritten here how will we add that here.

``````if ( e % 2 == 0) {
p = b*b;
e/=2;
}``````

Oh. I didn't realize you are doing that.

Back to the original:

``````while ( e )
{
if ( e % 2 == 0) {
p = b*b;
e/=2;
}
else if ( e % 2 == 1 ) {
p = b*p;
}
}``````

Let's say, `e` is a power of 2, so the code never enters the `else` clause. Can you tell what would be the result?

## Iam3R 24

Oh. I didn't realize you are doing that.

Back to the original:

Let's say, `e` is a power of 2, so the code never enters the `else` clause. Can you tell what would be the result?

what ever is the value of `'e'` it will definently become 1 at the last iteration.

now the problem is

if e is even initially the return value should be the value in if part, if not the return value should be base multiplied by the value in the if part