📜  门| GATE-CS-2016(套装2)|第 45 题

📅  最后修改于: 2021-09-26 03:26:19             🧑  作者: Mango

下面的函数计算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;
}

在循环的每次迭代之前,以下哪个条件为真

选项 1
(一) 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 

这个问题的测验