有人可以告诉我为什么它是4?

时间:2015-05-15 21:36:57

标签: java

考虑以下方法:

public int foo(int n) {
    int x = 1;
    int k = 0;
    while (x <= n) {
        x = x * 2;
        k = k + 1;
    }
    return k;
}

foo(13)返回什么值?我知道答案是4但有人可以告诉我为什么它是4?

6 个答案:

答案 0 :(得分:3)

x在循环中每次迭代都会加倍,k每次都会增加1。

用桌子画出来很简单。

x  |  k 
1  |  0  
2  |  1
4  |  2
8  |  3
16 |  4
32 | <end of loop>

答案 1 :(得分:1)

x在每一步都加倍,直到它变得大于13。所以x = 1 -> 2 -> 4 -> 8 -> 16。所以它加倍了4次,k也加了4次。因此,从0开始4

答案 2 :(得分:1)

以下是步骤/算法步骤:

X=1 k=0 n =13

Step 1: x=2 k=1 

Step 2: x=4 k=2

Step 3: x=8 k = 3. Since 8<13...

Step 4: x=16 k= 4. 16>13, so return k=4.

答案 3 :(得分:0)

它的发现n&lt; 2 ^ k其中k是你的答案。当n = 13:13

答案 4 :(得分:0)

K是输入while循环的次数。

当x为2次幂时,2 ^ 3小于13,所以最后一次进入,2 ^ 4大于13,然后k为4

答案 5 :(得分:0)

很简单......

Options -Indexes

<IfModule mod_rewrite.c>

    RewriteEngine On
    RewriteBase /mpl/servicos/smvcf/

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.+)-([0-9]+)\.html detalhe/$2 [L]

    # Force to exclude the trailing slash
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.*)/$
    RewriteRule ^(.+)/$ $1 [R=307,L]

    # Allow any files or directories that exist to be displayed directly
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?$1 [QSA,L]

</IfModule>

当x大于或等于n [13]

时,你的while循环停止

每次x乘以2

(定义)x = 1

  1. x = 2

  2. x = 4

  3. x = 8

  4. x = 16(现在已超过n [13])

  5. 所以while循环运行4次

    public int foo([13]) {
        int x = 1;
        int k = 0;
        while (x <= n) {
            x = x * 2;
            k = k + 1;
        }
        return k;
    }
    

    K [0] + 1 = 1

    K [1] + 1 = 2

    K [2] + 1 = 3

    K [3] + 1 = 4

    这就是为什么它的4。