FC ConcursosFC Concursos

Questão FC373284

Considere o código Java abaixo. public class Cla01 { public static void main(String[ ] args) { int b = 10; int j = 6; int n = 1; for (int i = 1; i <= j; ++i) { n = b * n; System.ou

Linguagens de Programação

FCC · 2019

Considere o código Java abaixo.

 

     public class Cla01 {

           public static void main(String[ ] args) {

                  int b = 10;

                  int j = 6;

                  int n = 1;

                  for (int i = 1; i <= j; ++i) {

                       n = b * n;

                       System.out.println(n + " " + executa(n));

                  }

     }

     public static int executa(int n) {

            int i = 0, n1 = n;

            while (n1 > 1) {

                   i += 1;

                   n1 /= 2;

            }

            return i;

     }

}

 

A penúltima execução de System.out.println(n + " " + executa(n)); exibirá na tela

  1. 1000000 19
  2. 1000 9
  3. 10000 13
  4. 10000000 23
  5. 100000 16
Mostrar resposta e comentário

Gabarito

Errado

Comentário do professor

Penúltima execução: o for vai de 1 a j (j = 6), então a penúltima impressão ocorre quando i = 5. Com n inicial 1 e b = 10, a cada iteração fazemos \(n = 10 \times n\). Após 5 iterações temos \(n = 10^5 = 100000\).

executa(n) conta quantas vezes se pode dividir n por 2 (divisão inteira) enquanto n1 > 1; ou seja, retorna o piso do logaritmo base 2 de n: \( \lfloor\log_2 n\rfloor \). Como \(2^{16}=65536\) e \(2^{17}=131072\), vale \(2^{16}<100000<2^{17}\), logo \(\lfloor\log_2 100000\rfloor = 16\).

Portanto, a impressão será: 100000 16.

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo