• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ordepavr

Converter numero 123 -> 321

9 mensagens neste tópico

Ola, eu estou com uma dúvida. Tenho que criar um programa em C que converta um numero, por exemplo insiro 123 e ele devolve 321 mas não posso aceitar como texto. Tem que ser como número. Espero que me possam ajudar..

cumps Pedro Lopes

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

De uma forma rápida, não quer dizer que seja correcta, optimizada ou o que mais, poderás ler o valor como número, imprimir esse valor para uma variável String, e inverter a ordem dos caracteres. Para escreveres para dentro de uma string podes usar o sprintf, que funciona exactamente como o printf mas que usa um parâmetro que é a string para onde queres escrever.

Quando digo "String" refiro-me a um vector de caracteres terminado pelo '\0'.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes ir dividindo por 10 e colocando o resto num array e depois basta multiplicares por 10^x onde x será a posição onde queres o digito. Algo do género:

while(x > 0) {
   resto[digitos] = x %10;
   digitos++;
   x /=10;
}

for (i=digitos;i>0;i--)
{
   resutado += resto[i] * pow(10,digitos);
}

Já não escrevo código em c à algum tempo, é possível que exista algo de errado no código.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Também podes ir com algo deste género:

int revert(int n)
{
   int ret=0;
   int i=1;
   
   while(i<=n)
   {
       ret*=10;
       ret+=(n%(i*10)-n%i)/i;
       i*=10;
   }
   return ret;
}

main()
{
   int num, rev;
   printf("Numero a inverter:\n");
   scanf("%d",&num);
   rev = revert(num);
   printf("o numero invertido é: %d", rev);
   getch();
}

PS: não testei mas assim de olho deve funcionar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isto e' o mais elegante que consigo:

#include <assert.h>

int
reverse(int n)
{
int r=0;

assert(n >= 0);

for (; n; n/=10)
	r=r*10+n%10;

return r;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
int inverte(int n, int res){
if( n/10 == 0 )
	return res*10 + n%10;
return inverte(n/10, res*10 + n%10);

}

void main(){
printf("%d", inverte(123, 0));
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podiam tentar ajudar sem dar o código completo... tinha mais valor.

sim, o objectivo é que eu fique a saber e não que eu copie... mas foram grande ajuda... ja resolvi.

Por acaso ficou de forma diferente de todos estes mas ajudaram bastante.

Muito obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podias mostrar tb a forma como fizeste, assim ficavamos com mais uma solução.

0

Partilhar esta mensagem


Link 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