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?
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
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