Faça um programa que leia dois números
e
(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
e
, 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;
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;
}