Pesquisar este blog

Livros Recomendados

sábado, 27 de fevereiro de 2021

URI (BEECROWD) - 1871 - Zero vale Zero (Zero means Zero) - Strings - C e C++

Um exercício de strings bem interessante chamado "Zero vale zero" foi resolvido e aqui estou para postar a solução! Na verdade fiz uma solução em C e duas em C++, sendo uma delas com a mesma estrutura da solução feita em C. Confira na sequência!

Plataforma: URI (BEECROWD)

Problema1871

Enunciado:
Um dia o Prof. Humberto José Roberto fez o seguinte questionamento: Se o zero a esquerda de um número não tem valor algum, por que teria em outras posições de um número? Analisando da seguinte forma, ele pede sua ajuda para, ao somar dois valores inteiros, que o resultado seja exibido segundo o raciocínio dele, ou seja, sem os Zeros. Por exemplo, ao somar 15 + 5, o resultado seria 20, mas com esta nova ideia, o novo resultado seria 2, e, ao somar 99 + 6, o resultado seria 105, mas com esta nova ideia, o novo resultado seria 15. Escreva um programa que, dado dois números inteiros, sem o algarismo zero, some os mesmos e, caso o resultado tenha algum algarismo zero, que os retire antes de exibir.

Linguagens: C e C++


Solução:

Código em C:

A estratégia aqui foi ler os valores, somá-los e salvar esta soma em forma de string. Depois disso, basta percorrer a string como um array à procura do caractere '0'. Caso o caractere seja diferente de '0', imprime.

#include <stdio.h>

int main() {

    int n, m, resultado, indice;
    char *resposta = (char *) malloc(sizeof(char) * 11);

    while (1) {
        
        scanf("%i %i ", &n, &m);
        
        if (n == 0 && m == 0) exit(0);
        
        resultado = n + m;
        
        snprintf(resposta, 11, "%d", resultado);
        
        indice = 0;
        while (resposta[indice] != '\0') {
            if (resposta[indice] != '0')
                printf("%c", resposta[indice]);
                
            indice++;
        }
        
        printf("\n");
        
    }

    return 0;
}

Código em C++:
Mesma lógica do código acima.


#include <iostream>

using namespace std;

int main() {

    int n, m, resultado, indice;
    string resposta;

    while (1) {
        
        cin >> n >> m;
        
        if (n == 0 && m == 0) exit(0);
        
        resultado = n + m;
        
        resposta = to_string(resultado);
        
        indice = 0;
        while (resposta[indice] != '\0') {
            if (resposta[indice] != '0')
                cout << resposta[indice];
                
            indice++;
        }
        
        cout << endl;
        
    }

    return 0;
}

Solução alternativa em C++:
Apesar do exercício ser de strings, a forma alternativa e que recebe o aceite no exercício não usa string. Neste exercício é feita a soma dos dois valores. Então, o último digito é isolado, colocando ele em um vetor caso ele seja diferente de zero. Além disso, o último digito da soma é removido. Este processo é feito até a soma assumir o valor zero, quando o vetor é percorrido de trás para frente, gerando o resultado.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <vector>
 
using namespace std;


int main() {
 long a, b;
 long sum;
 int digit;
 cin >> a >> b;

 while(a!=0 or b!=0){
  sum = a + b;
  vector<int> numFinal;
  while(sum > 0){
   digit = sum%10;
   //cout << "Digito" << digit << endl;
   if(digit!=0){
    numFinal.push_back(digit); 
   }
   sum = sum/10;
  }
  for(int i = numFinal.size()-1;i>=0;i--){
   cout << numFinal[i];
  }
  cout << endl;
  cin >> a >> b;
 }
      
    return 0;
}

Nenhum comentário:

Postar um comentário

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas