Ir para conteúdo
Fórum Script Brasil
  • 0

Ler Algarismos De Um Nº Sem O Uso De Vetores


danted

Pergunta

Pessoal, estou tentando descobrir o melhor método para ler um número e excluir algarismos desse número, obtendo um novo número sem os algarismos excluídos (desculpem-me pela redundância).

Abaixo explico melhor minha tentativa.

Não pretendo que resolvam o problema, mas apenas me apontem o que está errado nessa parte do código, indicando o melhor caminho para a solução. Já modifiquei o código várias vezes que já nem sei mais o que estou fazendo. Pelas simulações que fiz (alterando meu código para imprimir a saída após cada loop, verifiquei que as divisões não estão saindo conforme esperava).

Como exemplo, suponha que eu tenha essas duas variáveis:

n1_original = 4621

n2_original = 3625

A idéia é comparar as duas variáveis acima e, encontrando algarismos iguais ocupando casas decimais iguais, retirar esses algarismos de n1 e n2, obtendo novas variáveis; por exemplo após retirar o '2' e o '6' de n1 e n2 e, guardando os novos valores em n1_novo e em n2_novo, respectivamente, obteria: n1_novo = 41 e n2_novo = 35. Pois o algarismo 2 está presente nos dois números ocupando a casa das dezenas, o mesmo ocorre com o algarismo 6, ocupando a casa das centenas.

Para isso, declaro uma outra variável, que chamarei de "divisor" que será útil aqui, e vou comparando os restos das divisões de n1 e n2 por 10. Ou seja:

/* declarações de variáveis (todas inteiras) */

int n1_original, n2_original, n1 = n1_original, n2 = n2_original, n1_novo = n1, n2_novo = n2, divisor = 10;

E teria um loop que ficaria assim:

while(n1 > 0){

if(n1%10 == n2%10){

/* aqui entra um contador, mas não interessa na minha dúvida */

/* se o algarismo das unidades não for excluído */

if(n2_novo%10 != n1_novo%10){

n1_novo = (n1_original/divisor)*(divisor/10) + n1_novo%(divisor/10);

n2_novo = (n2_original/divisor)*(divisor/10) + n2_novo%(divisor/10);

}

/* se o algarismo das unidades for excluído */

else{

n2_novo = n2_original/divisor;

n1_novo = n1_original/divisor;

}

}/*fim if */

n1 = n1 / 10;

n2 = n2 / 10;

divisor = divisor*10;

} /*fim while */

Minha dúvida é mais quanto à linha:

n1_novo = (n1_original/divisor)*(divisor/10) + n1_novo%(divisor/10);

Bom, desculpem-me pela longa mensagem, mas achei que ficaria mais fácil de explicar o que estou tentando fazer incluindo parte do meu código aqui. Agradeço qualquer orientação.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

usando vetor ficaria muito mais simples manipular isso ai,

imagina um vetor inteiro dos números tirados de seu problema:

n1_original = [4][6][2][1]

n2_original = [3][6][2][5]

desse jeito voce evita toda a parte matemática de cálculo e tal, mas se voce quiser mesmo fazer desse seu jeito proposto pensei em uma solućão aqui, mas ainda não apliquei, pois estou meio sem tempo, veja só:

voce quer retirar o digito da unidade, então faca assim:

int unidade,aux,aux1,u=1,d=10,c=100;

aux = 4621/10; //vai dar um float, mas como é inteiro so retorna a parte inteira
aux1 = aux*10;
unidade=n1_original-aux1;
unidade=unidade/u;

aux=4621/100;
aux1=aux*100;
decimal=(n1_original-aux1)-unidade;
decimal=decimal/d;

e por ai vai, tem uma sequencia que se repete, voce pode calcular quantos digitos tem esse número e executar essa repetićão num loop

Link para o comentário
Compartilhar em outros sites

  • 0

Olá, kandrade!

De fato, embora eu tenha uma idéia do uso de vetores, mas não saiba ainda trabalhar com eles, também considero que o código seria muito mais simplificado com o uso deles.

Muito obrigado pela resposta, ela serviria muito bem; mas como eu também não fui muito explícito quanto ao enunciado da questão (até porque não queria que pensassem que eu estivesse dando um problema para ser resolvido totalmente por vocês), seria difícil entender o que eu, realmente, estava precisando.

Quanto à sua sugestão, o único incoveniente é que eu teria de usar várias variáveis (imagine um número com 9 casas decimais!). Mas a boa notícia é que eu consegui resolver o problema (ao menos ainda não verifiquei nenhum erro [rs]).

Se achar necessário, coloco, resumidamente, ele aqui. Só não o faço agora para não tornar essa resposta longa demais.

Mais uma vez, obrigado pela sugestão!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...