Médio Rust

Soma com loop e break

Enunciado

Use um loop infinito para somar números inteiros começando em 1. O loop deve parar quando a soma ultrapassar 50, e então imprimir a soma final e o último número somado.

Requisitos

  • Use loop com break para encerrar.
  • O break deve retornar uma tupla (soma, ultimo_numero).
  • Imprima no formato Soma: X, Último número: Y.

Código inicial

fn main() {
    // use loop e break com valor
}

Saída esperada

Soma: 55, Último número: 10
Ver dica

A soma de 1 a 10 é 55. O break pode retornar uma tupla com os valores desejados.

Mostrar solução
fn main() {
    let mut soma = 0;
    let mut numero = 1;

    // loop infinito que retorna uma tupla no break
    let (soma_final, ultimo) = loop {
        soma += numero;
        if soma > 50 {
            break (soma, numero); // retorna a soma e o número que fez ultrapassar
        }
        numero += 1;
    };

    println!("Soma: {}, Último número: {}", soma_final, ultimo);
}

Passo a passo

  1. Inicializamos soma com 0 e numero com 1.
  2. Entramos em um loop infinito.
  3. Dentro do loop, somamos numero à soma.
  4. Verificamos se soma > 50. Se sim, usamos break para sair do loop retornando uma tupla (soma, numero).
  5. Se não, incrementamos numero e continuamos.
  6. O valor retornado pelo break é atribuído às variáveis soma_final e ultimo via desestruturação.
  7. Imprimimos o resultado.

Por que funciona

O loop é a única construção de repetição que pode retornar um valor através do break. Isso é útil quando você precisa acumular um resultado e só sabe quando parar dentro do próprio loop. A tupla permite retornar múltiplos valores de uma vez.

Erros comuns

  • Esquecer de incrementar numero dentro do loop: isso causaria um loop infinito sem fim.
  • Tentar usar break valor em um while ou for: isso não é permitido; apenas loop aceita valor no break.
  • Declarar soma_final e ultimo como mutáveis sem necessidade: elas são imutáveis após a atribuição.

Outra forma de resolver

Poderia usar while soma <= 50 com uma variável mutável para armazenar o último número, mas o loop com break é mais direto e evita estado extra.

Saída esperada

Soma: 55, Último número: 10