Enunciado

Um determinado método para encriptar números de 4 dígitos consiste em adicionar 1 em cada dígito do número.

Por exemplo:

O número 1234 ficaria 2345 após a encriptação.

O número 9092 ficaria 0103 após a encriptação.

Entrada

Número a ser encriptado

Saída

Número encriptado

Discutindo o Problema

Como em grande parte dos problemas de computação, este tem como objetivo a resolução de um problema através de regras matemáticas. Como tal neste exercício você deve entender como podemos separar os dígitos de um valor inteiro a fim de manipularmos individualmente cada um deles.

Pra alguém experiente em computação ou matemática este é um problema simples, mas para quem está iniciando pode muito bem ter um entendimento errado e vir a ler o número como uma string a fim de manipular os valores como caracteres por exemplo. Esse tipo de solução com strings por mais que funcione, será um trabalho muito dispendioso e terá muitas linhas de código que seriam desnecessárias.

Portanto para resolvermos esse problema basta entendermos como o computador realiza uma conta de divisão para solucionarmos esse problema.

Um ponto importante a se atentar, é que quando realizamos divisões inteiras em um computador o mesmo não devolverá a resposta utilizando casas decimais, isto é, imagine realizarmos a seguinte divisão:

5/2

Intuitivamente podemos dizer que o resultado é 2.5, entretanto para o computador o resultado é 2 devido ao fato de ser uma divisão inteira.

Mas agora você pode estar se perguntado, o que aconteceu com o restante do valor, evaporou? Bom, a resposta pra isso é bem simples, o resto como o próprio nome já diz se tornou o resto da divisão, e como tal também pode ser recuperado, para isso iremos utilizar os seguintes operadores matemáticos.

5/2 = 2: Para obter a parte inteira da divisão

5%2 = 1: Para obter o resto da divisão

Há uma diferença bem sutil entre os operadores / e %, porém o resultado é totalmente diferente.

Em Python o operador equivalente a divisão inteira é o //, preste atenção nesse detalhe pois caso utilize o operador / como é feito em Java ou em C poderá resultar em um erro de cálculo.

Portanto para resolvermos esse problema devemos fazer o seguinte:

Vamos supor que meu valor de entrada é 1234, usamos o operador % para obter o resto da divisão por 10 que no caso é 4, então salvamos esse valor em alguma variável. Em seguida realizamos a divisão do valor 1234 por 10, obtendo assim o valor 123. Usamos novamente o operador % a fim de obter o resto da divisão por 10 que agora vale 3, e então novamente dividimos o valor original por 10 até o momento em que o resultado seja 0, o que corresponde ao final da operação.

Caso tenha dúvidas observe a imagem acima que ilustra bem essas operações.

Logo, supondo uma entrada fixa de 4 dígitos, podemos solucionar o problema assim como se segue:

Milhar = (num%10000)/1000
Centena = (num%1000)/100
Dezena = (num%100)/10
Unidade = num%10

Código Fonte

Java

import java.util.Scanner;

class Main {
  public static void main(String[] args) {
      int entrada, milhar, centena, dezena, unidade;
 
      Scanner teclado = new Scanner(System.in);

      entrada = teclado.nextInt();
  
      milhar = (entrada%10000)/1000;
      centena = (entrada%1000)/100;
      dezena = (entrada%100)/10;
      unidade = entrada%10;
    
      if(milhar==9){
        milhar=0;
      }else{
        milhar++;
      }
      if(centena==9){
        centena=0;
      }else{
        centena++;
      }
      if(dezena==9){
        dezena=0;
      }else{
        dezena++;
      }
      if(unidade==9){
        unidade=0;
      }else{
        unidade++;
      }

      System.out.printf("%d%d%d%d\n", milhar, centena, dezena, unidade);
  }
}

C/C++

#include <stdio.h>

int main(void) {

  int entrada, milhar, centena, dezena, unidade;

  scanf("%d", &entrada);

  milhar = (entrada%10000)/1000;
  centena = (entrada%1000)/100;
  dezena = (entrada%100)/10;
  unidade = entrada%10;

  if(milhar==9){
    milhar=0;
  }else{
    milhar++;
  }
  if(centena==9){
    centena=0;
  }else{
    centena++;
  }
  if(dezena==9){
    dezena=0;
  }else{
    dezena++;
  }
  if(unidade==9){
    unidade=0;
  }else{
    unidade++;
  }

  printf("%d%d%d%d\n", milhar, centena, dezena, unidade);
  return 0;
}

Python

entrada = int(input())

milhar = (entrada%10000)//1000
centena = (entrada%1000)//100
dezena = (entrada%100)//10
unidade = entrada%10

if milhar==9:
  milhar=0
else:
  milhar += 1
if centena==9:
  centena=0;
else:
  centena += 1
if dezena==9:
  dezena=0
else:
  dezena += 1
if unidade==9:
  unidade=0
else:
  unidade += 1

print('%d%d%d%d' %(milhar, centena, dezena, unidade));

Até o próximo problema!


25 Posts