Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Exercício: Somando os primeiros N números

Nessa versão, o usuário pode escolher o número de dias que quiser.

import { createInterface } from "readline";

const rl = createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.question("Quantos dias devem ser calculados?\n> ", (input) => {
  const dias = Number(input);

  if (Number.isNaN(dias) || !Number.isInteger(dias) || dias < 1) {
    console.log("Insira um número válido.");
    rl.close();
    return;
  }

  let valorAtual = 0,
    count = 1;

  while (count <= dias) {
    valorAtual += count++;
  }

  console.log("Total economizado: R$" + valorAtual);

  rl.close();
});
2 respostas
solução!

Olá, Vitor. Como vai?

Parabéns por mais uma excelente implementação! Você aplicou corretamente a lógica do somatório (conhecida matematicamente como a soma de uma progressão aritmética) utilizando o laço de repetição while.

O que mais chama a atenção no seu código é a organização. Assim como no seu projeto anterior, a validação de dados está robusta, garantindo que o programa não tente processar valores inválidos, como números negativos ou decimais.

Gostaria de destacar alguns pontos técnicos interessantes sobre a sua solução:

  • Acumulador: A variável valorAtual funciona como um acumulador perfeito. Ela "guarda" o estado da soma a cada iteração do laço.
  • Operador Combinado: Ao utilizar valorAtual += count++, você realizou três operações em uma única linha: somou o valor de count ao total, atribuiu o resultado e, por fim, incrementou o contador para a próxima volta do laço. Isso mostra um domínio avançado da sintaxe do JavaScript.
  • Escalabilidade: O seu código resolve o problema para qualquer número de dias, o que é a essência de um bom algoritmo.

Para fins de curiosidade e expansão de conhecimento, saiba que existe uma fórmula matemática (atribuída a Gauss) que resolve esse cálculo sem a necessidade de um laço de repetição, o que seria mais performático para números gigantescos:

// Fórmula: (n * (n + 1)) / 2
const total = (dias * (dias + 1)) / 2;

Entretanto, para o propósito de praticar laços de repetição, sua abordagem com while é a maneira ideal de entender como o computador processa passo a passo o acúmulo de valores.

Espero que possa ter lhe ajudado!

Oi, Evandro! Tudo bem?

Obrigado pelo feedback, fico feliz que tenha gostado da organização do código e da forma como tratei a validação.

Conheço sim a fórmula da soma dos termos da PA e inclusive pensei nela enquanto fazia o exercício. Mas, como o objetivo era praticar laços de repetição, acabei optando por manter o uso do while justamente para treinar essa abordagem passo a passo.

Valeu pelas observações e pelo material extra, sempre ajuda a enxergar outras formas de resolver o mesmo problema!