Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    69

    [ C ] Invertire un numero intero

    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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma in input hai un numero e in uscita un numero in un'altra variabile, o ti serve soltanto visualizzarlo invertito?

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    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]
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    69
    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);

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Perche' non segui il consiglio di XWolverineX ?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    69
    Principalmente perchè la funzione itoa su linux non c'è

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    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 ...

  8. #8
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    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)
    codice:
    #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.)
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    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 ...

  10. #10
    Una mia versione
    codice:
    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;
    }
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.