- Faça um programa que receba dois vetores com
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
e vet2
geraria o vet3
.
Passo 1
O enunciado pede um programa que receba dois vetores de tamanho
, cada elemento sendo um dígito de
a
, 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
e
deve sair
.
O conteúdo envolvido é manipulação de vetores e aritmética de inteiros com transporte (carry).
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
de
até
:
- Verificamos se
- 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
Em seguida, para
de
até
(indo do dígito menos significativo para o mais significativo):
. Calculamos
e o novo transporte (carry) é
res
de tamanho
Passo 4
Após terminar o laço, ainda pode restar
. Se for maior que zero, colocamos
. Caso contrário, descartamos a posição
e consideramos apenas
.
Passo 5
Por fim, exibimos o vetor . No nosso exemplo:
res
(inteira ou deslocada) como o vetor
-
: digit , carry -
: digit , carry -
: digit , carry
E então colocamosres[\(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\)]