Faça um programa que leia dois números a e b (positivos menores que 10000) e:
  • Crie um vetor onde cada posição é um algarismo do número. A primeira posição é o algarismo menos significativo;
  • Crie um vetor que seja a soma de a e b, mas faça-o usando apenas os vetores construídos anteriormente.

Passo 1

O exercício pede para ler dois números inteiros positivos a e b (<10000) e representá-los em vetores de dígitos (LSB em índice 0), depois somar esses vetores dígito a dígito, com carry, gerando um terceiro vetor de resultado.

Passo 2

Para extrair os dígitos de um número n e armazenar em um vetor díg[] (LSB em díg[0]), podemos usar um loop que enquanto n>0 faz: díg[i]=n mod 10 e n=n div 10, incrementando i. Assim todos os dígitos ficam no vetor, da posição 0 (unidades) até a posição final (MSB).

Passo 3

Aplicamos o procedimento acima para a e para b, criando dois vetores dígA[] e dígB[]. Como a e b têm no máximo 4 dígitos, podemos pré-definir dígA[4] e dígB[4], preenchendo posições não usadas com 0.

Passo 4

Para somar dígitos com carry, definimos um vetor dígC de tamanho 5 (para acomodar eventual carry final). Inicializamos carry=0. Percorremos i de 0 até 4 (índice máximo de dígC): computamos soma = dígA[i] + dígB[i] + carry; dígC[i] = soma mod 10; carry = soma div 10.

Passo 5

Depois do loop, se carry for 1, já está em dígC[4]; caso contrário, podemos ignorar a última posição ou deixá-la como zero. O vetor dígC contém então a soma, no mesmo formato LSB em índice 0.

Passo 6

Segue abaixo um programa em C que implementa esse algoritmo.

Resposta

#include <stdio.h>
int main() {
int a, b;
int digA[5] = {0}, digB[5] = {0}, digC[5] = {0};
int i, carry = 0, soma;
// Leitura dos números
scanf("%d %d", &a, &b);

// Preenche vetor de dígitos de a
for (i = 0; i < 4; i++) {
    digA[i] = a % 10;
    a /= 10;
}

// Preenche vetor de dígitos de b
for (i = 0; i < 4; i++) {
    digB[i] = b % 10;
    b /= 10;
}

// Soma dígito a dígito com carry
for (i = 0; i < 5; i++) {
    soma = digA[i] + digB[i] + carry;
    digC[i] = soma % 10;
    carry = soma / 10;
}

// Exibe resultado (LSB primeiro)
for (i = 0; i < 5; i++) {
    printf("%d ", digC[i]);
}
printf("\n");

return 0;
}

Exercícios relacionados