Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C] Funzione per riscrivere un numero al contrario

    Salve a tutti,
    il problema richiede di riscrivere un numero al contrario;

    La soluzione che ho adoperato è stato di scomporre il numero in cifre mediante l'algoritmo delle divisioni successive; Salvere le cifre in un vettore; Moltiplicare ogni singola cifra per il nuovo peso*

    *345 = 3*10^2+4*10^1+5*10^0; Invertito, 543 sarà 5*10^2 + 4*10^1 + 3*10^0 ovvero ho invertito il peso delle cifre.

    La funzione quindi ricevere come parametro in entrare il numero da invertire e darà in uscità il numero invertito.

    Il codice della funzione è il seguente:

    codice:
    int inversione(int numero)
    {
        int i,j;
        int vet[100];
        for(i=0; numero > 0; i++)
        {
                 vet[i] = numero % 10;
                 numero = numero / 10;   
                 printf("%d\n",vet[i]); //debug     
        }
        printf("i= %d\n",i);//debug
        numero = 0;
        for(j=0; j < i; j++)
        {
                numero = numero + vet[j] * pow(10,i-j-1);
                printf("%d\n",numero); //debug 
        }
        return numero;
        
        
    }
    Per numeri con quantità di cifre pari funziona. Per i numeri con fire dispari il risutato è molto "random". Sapreste dirmi dov'è l'errore? o meglio, sicuramente sarà nell'assegnazione del valore della variabile "numero" all'interno dell'ultimo ciclo for, ma non riesco a capire quale sia.

    Vi ringrazio in anticipo,
    Neptune.
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma non è più semplice senza potenze, vettori, doppi cicli ... ?

    Intendo

    codice:
    int inversione(int numero)
    {
      int ris = 0;
    
      while(numero)
      {
        ris = ris * 10 + numero % 10;
        numero /= 10;
      }
    	
      return ris;
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    569
    Comunque l'errore sta nella funzione pow(), che restituisce un double e non un int.

    Se al posto della pow() utilizzi una funzione tipo questa:

    codice:
    int potenza(int num, int exp)
    {
        int k=0;
        int tot=1;
        
        for ( k=0 ; k< exp ; k++ )
           tot=tot*num;
        
        return tot;
            
        }

    funzionerà anche il tuo codice.

    Ciao

  4. #4
    Originariamente inviato da oregon
    Ma non è più semplice senza potenze, vettori, doppi cicli ... ?

    Intendo

    codice:
    int inversione(int numero)
    {
      int ris = 0;
    
      while(numero)
      {
        ris = ris * 10 + numero % 10;
        numero /= 10;
      }
    	
      return ris;
    }
    L'esercizio, mi sono dimenticato di scriverlo, richiede oltre che "il numero riscritto al contrario" anche "diviso per cifre".

    Ecco, immaginavo fosse una sorta di errore di overflow della funzione pow. Ergo mi riscrivo a mano la funzione per le potenze. Strano però che non ci sia già nella libreria "math" che restituisca sempre una potenza come valore intero, anzichè double (che dovrebbe essere virgola mobile a doppia lunghezza o sbaglio?).
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

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 © 2025 vBulletin Solutions, Inc. All rights reserved.