TEMA

uDebug bugada! O.O

Song Jong Márcio Simioni da Costa preguntado 2 years ago

Creio que o juiz do URI não está julgando de maneira correta essa questão. Ou sei lá o que está acontecendo! :| Tá dando compilation error! :'(

#include <stdio.h>
#include <math.h>

int main(void) {
  unsigned long int N;
  long unsigned graos;

  scanf("%lu", &N);
  unsigned long int vet[N];
  unsigned long int kg[N];

  for(unsigned long int i = 0; i < N; i++){
    scanf("%lu", &vet[i]);
    graos = 1;
    if(vet[i] < 64){
      for(unsigned long int j = 1; j <= vet[i]; j++){
        graos *= 2;
      }
      kg[i] = graos / 12000;
    } else {
      unsigned int s = vet[i] - 63;
      for(unsigned long int j = 1; j <= 63; j++){
        graos *= 2;
      }
      kg[i] = graos / (12000 / pow(2,s)) ;
    }

  }

  for(unsigned long int i = 0; i < N; i++){
    printf("%lu kg\n", kg[i]);
  }

  return 0;
}

Recuerda no enviar soluciones. Tu mensaje puede ser revisado por nuestros moderadores.

  • Renato Nogueira respondido 2 years ago

    Olá, verifiquei seu código e gostaria de dar algumas sugestões:

    1º) Declare as variáveis no começo do programa e use o tipo unsigned long long int (Obs. para leitura e escrita deve ser %llu)

    #include <stdio.h>
    #include <math.h>
    #include <inttypes.h>
    #include <stdlib.h>
    
    int main(void) {
    unsigned long long int N;
    unsigned long long int graos;
    unsigned long long int i ;
    unsigned long long int j;
    unsigned long long int s;
    scanf("%llu", &N);

    2º) você não precisa armazenar os valores em um vetor, pode simplesmente lê-lo calculá-lo, imprimi-lo e ir para o próximo caso;

    3º) Mesmo usando o unsigned long long int, o valor de 2^64 estoura a capacidade da variável, para contornar esse problema, para esse caso, na minha solução utilizei;

    if (X==64) printf("1537228672809129 kg\n");

    Qualquer dúvida estamos aí.