下面的函数计算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;
}
在循环的每次迭代之前,以下哪个条件为真
(一) A
(乙)乙
(C)丙
(四)丁答案: (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 我们转到 else 部分
因此在迭代 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
这个问题的测验