1. Faça um programa que receba dois vetores com N números, no qual cada número do vetor deve conter apenas um dígito entre 0 e 9 (valide essa operação). Depois some os dois números e gere um terceiro vetor com a soma. Exemplo: vet1 =[8,2,3] e vet2 = [3,4,9] geraria o vet3 =[1,1,7,2].

Passo 1

O enunciado pede um programa que receba dois vetores de tamanho N, cada elemento sendo um dígito de 0 a 9, valide essa condição e depois some os dois números representados por esses vetores dígito a dígito, produzindo um terceiro vetor com o resultado da soma (incluindo possível carry extra). Por exemplo, para
vet1=[8,2,3] e vet2=[3,4,9] deve sair vet3=[1,1,7,2].
O conteúdo envolvido é manipulação de vetores e aritmética de inteiros com transporte (carry).

Passo 2

Primeiro vamos lidar com a validação de entrada. Para cada índice i de 0 até N-1:
  • Verificamos se 0 <= vet1[i] <= 9 e 0 <= vet2[i] <= 9
  • Se algum teste falhar, interrompemos o programa com mensagem de erro.

Passo 3

Agora implementamos a soma dígito a dígito com carry. Inicializamos
carry 0
Em seguida, para i de N-1 até 0 (indo do dígito menos significativo para o mais significativo):
1. Calculamos
sum vet1[i] + vet2[i] + carry
2. O dígito resultante neste estágio é
digit sum bmod 10,
e o novo transporte (carry) é
carry lfloor sum10 rfloor
3. Armazenamos esse dígito em um vetor auxiliar res de tamanho N+1 na posição i+1.

Passo 4

Após terminar o laço, ainda pode restar carry=1. Se for maior que zero, colocamos res[0] >=ts carry. Caso contrário, descartamos a posição 0 e consideramos apenas res[1N].

Passo 5

Por fim, exibimos o vetor res (inteira ou deslocada) como o vetor . No nosso exemplo:
  • : digit , carry
  • : digit , carry
  • : digit , carry
    E então colocamos res[\(0\)]\(=1\), resultando em .

Resposta

def \(soma_vetores\)(vet\(1\), vet\(2\)):
    N \(=\) len(vet\(1\))
    # Validação dos dígitos
    for i in range(N):
        if vet\(1\)[i] < \(0\) or vet\(1\)[i] > \(9\) or vet\(2\)[i] < \(0\) or vet\(2\)[i] > \(9\):
            raise ValueError("Cada elemento deve estar entre \(0\) e \(9\)")
    # Prepara vetor de resultado com espaço para carry extra
    res \(=\) [\(0\)] * (N \(+1\))
    carry \(=0\)
    # Soma de trás pra frente
    for i in range(N-\(1\), -\(1\), -\(1\)):
        total \(=\) vet\(1\)[i] \(+\) vet\(2\)[i] \(+\) carry
        res[i\(+1\)] \(=\) total % \(10\)
        carry \(=\) total // \(10\)
    # Ajusta carry inicial
    if carry > \(0\):
        res[\(0\)] \(=\) carry
        return res      # lista com N\(+1\) dígitos
    else:
        return res[\(1\):]  # lista com N dígitos

# Exemplo de uso
vet\(1=\) [\(8,2\),\(3\)]
vet\(2=\) [\(3,4\),\(9\)]
vet\(3= soma_vetores\)(vet\(1\), vet\(2\))
print(vet\(3\))  # imprime [\(1\), \(1\), \(7\), \(2\)]

Exercícios relacionados