📜  门| GATE-CS-2016(Set 2)|第45章

📅  最后修改于: 2021-06-30 01:03:42             🧑  作者: 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;
}

在循环的每次迭代之前,下列条件之一为TRUE

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

这个问题的测验