PUERTA | GATE-CS-2016 (Conjunto 2) | Pregunta 45

La siguiente función calcula X Y para los enteros positivos X e Y.

int exp(int X, int Y)
{
    int res = 1, a = X, b = Y;
    while ( b != 0 )
    {
        if ( b%2 == 0)
        {
            a = a*a;
            b = b/2;
        }
        else
        {
            res = res*a;
            b = b-1;
        }
    }
    return res;
}

¿Cuál de las siguientes condiciones es VERDADERA antes de cada iteración del bucle?

options1
(A) A
(B) B
(C) C
(D) D

Respuesta: (C)
Explicación:
Podemos resolver esta pregunta tomando dos valores cualesquiera para X e Y.
Supongamos que X= 2 e Y= 5, ahora este código será calcular
Mirando cada iteración por separado
Antes de la iteración 1 – X=2 Y= 5 a=2 , b=5, res=1
Iteración 1 – dado que b%2 !=0 vamos a otra parte
Por lo tanto, después de la iteración 1, X=2 , Y=5, a=2, b=4, res=2
Iteración 2 – dado que b%2=0 vamos a la parte if
Por lo tanto, después de la iteración 2, X=2, Y=5, a=4, b=2 , res=2
Iteración 3 – dado que b%2=0 vamos a la parte if
Por lo tanto, después de la iteración 3, X=2, Y=5, a=16, b=1, res=2
Iteración 4: dado que b% 2! = 0 vamos a otra parte
Por lo tanto, después de la iteración 4, X = 2, Y = 5, a = 16, b = 0, res = 32
Ahora poniendo los valores de X, Y, a, b, res en las ecuaciones dadas en las opciones después de cada
iteración, podemos ver que solo la ecuación c es correcta.

Esta solución es aportada por Parul Sharma.

Otra solución

En la opción C

Before Iteration 1: X^Y=64 res ∗ (a^b)=64
Before Iteration 2: X^Y=64 res ∗ (a^b)=64
Before Iteration 3: X^Y=64 res ∗ (a^b)=64 

Cuestionario de esta pregunta

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *