PDA

Visualizza la versione completa : [C] Invertire un numero intero


liberlux
01-03-2007, 21:09
C' qualche anima pia in grado di spiegarmi il procedimento di inversione di un intero?
Esempio:

input ---> 1234
output--->4321

come posso fare? Grazie anticipate

oregon
01-03-2007, 21:11
Ma in input hai un numero e in uscita un numero in un'altra variabile, o ti serve soltanto visualizzarlo invertito?

XWolverineX
01-03-2007, 21:18
Una buona idea,anche se credo poco efficiente, sarebbe

[list=1]
Convertire il numero in stringa con itoa
Invertire la stringa con la funzione strrev
Convertire la stringa invertita in un numero con atoi
[/list=1]

liberlux
01-03-2007, 21:40
mi servirebbe una cosa di questo tipo
int intero;
printf("inserisci un numero intero:\n");
scanf("%d", &intero);

variabile = intero invertito; ( 1234 ---> 4321)

printf("%d", variabile);

oregon
01-03-2007, 21:47
Perche' non segui il consiglio di XWolverineX ?

liberlux
01-03-2007, 21:52
Principalmente perch la funzione itoa su linux non c' :(

oregon
01-03-2007, 22:11
Beh ... avresti potuto dirlo sin dall'inizio ... per questo motivo le domande nel forum vanno poste indicando *tutto* quello che puo' essere utile ...

In ogni caso, un metodo potrebbe essere quello di dividere per potenze di 10 in maniera da prelevare la prima cifra decimale fermandosi appena questa e' zero ...

XWolverineX
01-03-2007, 22:15
Originariamente inviato da liberlux
Principalmente perch la funzione itoa su linux non c' :(

E comunque mi sembra una soluzione un p dispendiosa...
Ho fatto un piccolo esempio in C++(col C non mi destreggio molto)


#include <cstring>
#include <iostream>


int main(void)
{
int num;
char *ptr;

std::cout<<"Inserire un numero";
std::cin>>num;
ptr = new char[5];
itoa(num,ptr,1);
strrev(ptr);
num = atoi(ptr);
std::cout <<"Numero girato: " << num;

delete[] ptr;
system("PAUSE");
return 0;
}


Da per un'eccezione su itoa, forse per colpa del parametro radix che non mi ricordo a che serve (mi pare la base con cui leggere il numero, infatti itoa usata anche per convertire numeri da valori decimali a esadecimali, mi pare.)

oregon
01-03-2007, 22:24
Essendo proprio la radice, deve essere 10 per i numeri decimali ...

Ma scusa, hai sottolineato il fatto che non c'e' la itoa e tu proponi un codice con la itoa ??

Utilizza un altro metodo ...

Samuele_70
01-03-2007, 22:26
Una mia versione


int main()
{
long int out=0, p=1;
char ch;
do
{
ch=fgetc(stdin);
if( ch=='\n' )
break;
if( ch>47&&ch<=58)
{
out+=(p*(ch-48));
p=p*10;
}
}
while(1);
printf("\n\n%d\n", out);
return 0;
}

Loading