下面的函数计算X Y为正整数X和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;
}
在循环的每次迭代之前,下列条件之一为TRUE
(A) A
(B) B
(C) C
(D) D答案: (C)
解释:
我们可以使用X和Y的任意两个值来解决这个问题。
假设X = 2和Y = 5,现在此代码将计算
分别查看每个迭代
在迭代1之前– X = 2 Y = 5 a = 2,b = 5,res = 1
迭代1 –由于b%2!= 0,我们转到其他部分
因此,在迭代1之后,X = 2,Y = 5,a = 2,b = 4,res = 2
迭代2 –由于b%2 = 0,我们转到if部分
因此,在迭代2之后,X = 2,Y = 5,a = 4,b = 2,res = 2
迭代3 –由于b%2 = 0,我们转到if部分
因此,在迭代3之后,X = 2,Y = 5,a = 16,b = 1,res = 2
迭代4 –由于b%2!= 0,我们转到其他部分
因此,在迭代4之后,X = 2,Y = 5,a = 16,b = 0,res = 32
现在将X,Y,a,b,res的值放在每个选项后面的选项中给定的方程式中
迭代我们只能看到方程式c是正确的。
该解决方案由Parul sharma贡献。
另一种解决方案
在选项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
这个问题的测验