Crie um programa em C que recebe do usuário uma quantidade inteira de segundos e imprime na tela a quantidade de anos, dias, horas, minutos e segundos que são cobridos por essa entrada.
  • Entrada: 0
Saída: 0 anos, 0 dias, 0 horas, 0 minutos, 0 segundos
  • Entrada: 3600
Saída: 0 anos, 0 dias, 1 horas, 0 minutos, 0 segundos
  • Entrada: 180011983
Saída: 5 anos, 258 dias, 11 horas, 19 minutos, 43 segundos
Você deve considerar que 1 ano = 365 dias. Todos os valores são inteiros. A saída deve satisfazer às seguintes condições:
  1. 0 <= dias <365
  2. 0 <= horas <24
  3. 0 <= minutos <60
  4. 0 <= segundos <60
A SAÍDA DEVE SER EXATAMENTE COMO MOSTRADA NOS EXEMPLOS, com as palavras “anos”, “dias” no plural, com um espaço após cada vírgula, etc.

Passo 1

O enunciado pede criar um programa em C que lê do usuário uma quantidade inteira de segundos e converte esse total em anos, dias, horas, minutos e segundos, considerando que 1 ano =365 dias. Para isso, vamos usar operações de divisão inteira e resto de divisão (módulo) para “pegar” cada unidade a partir do total de segundos.

Passo 2

Definimos quantos segundos existem em cada unidade:
segundosporano = 365 times 24 times 3600
segundospordia = 24 times 3600
segundosporhora = 3600
segundosporminuto = 60
Em C, podemos implementar isso como constantes ou calcular diretamente nos expressões de divisão e módulo.

Passo 3

Para extrair cada unidade a partir de um total de segundos S:
1. anos = S dividido por segundosporano.
2. resto 1= S módulo segundosporano.
3. dias = resto 1 dividido por segundospordia.
4. resto 2= resto 1 módulo segundospordia.
5. horas = resto 2 dividido por segundosporhora.
6. resto 3= resto 2 módulo segundosporhora.
7. minutos = resto 3 dividido por segundosporminuto.
8. segundos = resto 3 módulo segundosporminuto.

Passo 4

Agora montamos o programa em C completo. Vamos:
  • Incluir <stdio.h>,
  • Declarar variáveis inteiras (podem ser long long para valores grandes),
  • Ler o total de segundos com scanf,
  • Fazer as divisões e módulos na ordem acima,
  • Imprimir usando printf no formato exato solicitado:
    "%lld anos, %lld dias, %lld horas, %lld minutos, %lld segundos\n"

Resposta

#include <stdio.h>

int main() {
    long long S;
    // lê o total de segundos
    if (scanf("%lld", &S) != 1) {
        return 0;
    }

    // constantes de conversão
    const long long SEG_POR_ANO = 365LL * 24 * 3600;
    const long long SEG_POR_DIA = 24LL * 3600;
    const long long SEG_POR_HORA = 3600LL;
    const long long SEG_POR_MINUTO = 60LL;

    // cálculo de cada unidade
    long long anos     = S / SEG_POR_ANO;
    long long resto1 = S % SEG_POR_ANO;
    long long dias     = resto1 / SEG_POR_DIA;
    long long resto2 = resto1 % SEG_POR_DIA;
    long long horas    = resto2 / SEG_POR_HORA;
    long long resto3 = resto2 % SEG_POR_HORA;
    long long minutos  = resto3 / SEG_POR_MINUTO;
    long long segundos = resto3 % SEG_POR_MINUTO;

    // saída no formato exato
    printf("%lld anos, %lld dias, %lld horas, %lld minutos, %lld segundos\n",
           anos, dias, horas, minutos, segundos);

    return 0;
}

Exercícios relacionados