Jump to content
  • 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

Recommended Posts

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 :)

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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:)

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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:

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.