Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

NosferatuPT

Função para trocar dígitos de um inteiro

Mensagens Recomendadas

NosferatuPT

Tenho de fazer um problema que consiste em criar uma função que aceite como parâmetro um inteiro e que troque os dígitos do mesmo.

Até agora tenho isto:

#include<stdio.h>

int troca(int num)
   {  int i=0;
       while(i < num)
          {
             scanf("%d",&num);
             num = (num/10)%10;
             i++;
             }
}

Mas acho que o que fiz foi apenas ler os dígitos um a um. Agora preciso de trocá-los.. mas não sei como 🤔

Ideias pf :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mogers

Esse while + scanf acho foi alguma confusão. Pensa bem naquilo que pretendes fazer.

Quanto à troca dos digitos, se o inverso de 100 for 1 (isto é, não precisas de apresentar os trailing 0's), podes fazer algo como

123 % 10 = 3

123 / 10 = 12 (divisão inteira)

12 % 10 = 2

12 / 10 = 1

1 % 10 = 1

1 / 10 = 0

321 = ((3 * 10) + 2) * 10) + 1


"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baderous

Podes vir a ter de jogar com as sucessivas potências de 10, daí que a função pow(base,expoente) do math.h pode vir a ser útil. Caso a utilizes não te esqueças de a linkar através da flag -lm.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Não tenho a certeza nem nunca fiz nada com eles mas penso que operadores bit a bit são capazes de te ajudar.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ic

Não tenho a certeza nem nunca fiz nada com eles mas penso que operadores bit a bit são capazes de te ajudar.

A forma mais simples deverá ser a apontada plo mogers:)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mogers

Não tenho a certeza nem nunca fiz nada com eles mas penso que operadores bit a bit são capazes de te ajudar.

Operações bit a bit ajudam bastante quando trabalhas com potências de base 2, mas como estamos a falar de base 10 (décimal), essas operações não servem.


"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NosferatuPT

Esse while + scanf acho foi alguma confusão. Pensa bem naquilo que pretendes fazer.

Quanto à troca dos digitos, se o inverso de 100 for 1 (isto é, não precisas de apresentar os trailing 0's), podes fazer algo como

123 % 10 = 3

123 / 10 = 12 (divisão inteira)

12 % 10 = 2

12 / 10 = 1

1 % 10 = 1

1 / 10 = 0

321 = ((3 * 10) + 2) * 10) + 1

Percebido :) Eu já suspeitava que seria algo assim..

É que a parte complicada para mim nem é fazer o raciocínio.. o difícil é passar para código.

Então, tenho de fazer com que o numero seja dividido por 10 (resto da divisão) e depois na mesma por 10 (sem ser a divisão com o resto). Mas o valor dessa última divisão tem de passar para o início do ciclo para ele considerar esse o número e voltar a fazer a mesma coisa até ser 0. Eu percebi.

Agora, como é que faço o while disso?...  :wallbash:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mogers

Podes começar por uma aproximação em pseudo-código para te ajudar a estruturar o pensamento. Depois, com a prática, começas a conseguir partir logo para o código.

Enquanto o número é diferente de 0   // while (num != 0)
    pegar no resto da divisão
    dividir num por 10
    actualizar o resultado
return resultado


"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
NosferatuPT

Podes começar por uma aproximação em pseudo-código para te ajudar a estruturar o pensamento. Depois, com a prática, começas a conseguir partir logo para o código.

Enquanto o número é diferente de 0   // while (num != 0)
    pegar no resto da divisão
    dividir num por 10
    actualizar o resultado
return resultado

Nunca fui adepto de pseudo-código... :) Mas pode fazer jeito :)

Muito obrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.