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

Sign in to follow this  
ordepavr

Converter numero 123 -> 321

Recommended Posts

ordepavr

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


"Programming is like sex: one mistake and you're providing support for a lifetime.""A exigência conduz à excelência"

Share this post


Link to post
Share on other sites
Knitter

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'.

Share this post


Link to post
Share on other sites
rgcaldas

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.

Share this post


Link to post
Share on other sites
cgoncalves

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.


"Great coders aren't born. They're compiled and released"

"Expert coders do not need a keyboard. They just throw magnets at the RAM

Share this post


Link to post
Share on other sites
orium

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;
}

Share this post


Link to post
Share on other sites
Indignad0
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));
}

Share this post


Link to post
Share on other sites
ordepavr

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


"Programming is like sex: one mistake and you're providing support for a lifetime.""A exigência conduz à excelência"

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
Sign in to follow this  

×

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.