Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    9

    scomporre un int in singole cifre

    Devo implementare in C una funzione che determina se un numero inserito è un numero harshad, (un numero è Harshad se è divisibile per il numero ottenuto sommando le sue cifre).
    Il mio problema è come posso ricavare dal numero N le sue singole cifre da sommare? Ad esempio se ho il numero 1279, avrò bisogno di calcolare la somma di 1+2+7+9. come le ricavo?


  2. #2
    io convertirei il numero in stringa, leggerei un carattere x volta che converto in intero e sommo al totale...
    però nn saprei come tradurlo in C

    Ciao

  3. #3
    Così su 2 piedi ho scritto questo, ma quasi sicuramente si può ottimizzare...
    codice:
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char **argv)
    {
    	char buffer[32];
    	int numero;
    	int somma=0;
    	printf("Inserisci il numero: ");
    	scanf("%d",&numero);
    	itoa(numero,buffer,10);
    	for(unsigned int i = 0; i < strlen(buffer); i++)
    	{
    		somma += (buffer[i]-48);
    	}
    	if((numero%somma) == 0)
    		printf("Il numero %d e' Harshad\n", numero);
    	else
    		printf("Il numero %d non e' Harshad\n", numero);
    	system("pause");
    	return 0;
    }

  4. #4
    Se il numero lo devi leggere come intero devi creare una procedura che ti permetta (attraverso divisioni intere) di ricavare le singole cifre.
    Experience is what you get when you don’t get what you want

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    9
    ma nel C è supportata la funzione "itoa"? o è un funzione che fa parte del C++?

    perchè, in fase di compilazione mi dà il seguente errore: "undefined reference to `itoa"

    Sul mio manuale è documentata solo quella inversa cioè: "Atoi(const char *nptr)"

  6. #6
    in effetti itoa non è una funzione ANSI-C ma è supportata da moltissimi compilatori. che compilatore usi? stai usando flag di compilazione che impongono di usare ANSI-C?

    Nel caso dovessi usare solo ansi-c ti conviene scrivere una tua versione di itoa, una cosa simile (il codice sorgente della funzione itoa):
    codice:
    char *itoa(int value, char *string, int radix)
    {
      char tmp[33];
      char *tp = tmp;
      int i;
      unsigned v;
      int sign;
      char *sp;
    
      if (radix > 36 || radix <= 1)
      {
        
        return 0;
      }
    
      sign = (radix == 10 && value < 0);
      if (sign)
        v = -value;
      else
        v = (unsigned)value;
      while (v || tp == tmp)
      {
        i = v % radix;
        v = v / radix;
        if (i < 10)
          *tp++ = i+'0';
        else
          *tp++ = i + 'a' - 10;
      }
    
      if (string == 0)
        string = (char *)malloc((tp-tmp)+sign+1);
      sp = string;
    
      if (sign)
        *sp++ = '-';
      while (tp > tmp)
        *sp++ = *--tp;
      *sp = 0;
      return string;
    }

  7. #7
    Premetto che io sono agli inizi, ma mi è capitato un esercizi del genere.

    codice:
    #include <stdio.h>
    
    int main()
    {
       int n, temp1, temp2, n1, n2, n3, n4;
    
       printf ("Inserisci un numero (4 cifre): ");
       scanf ("%d", &n);
    
       temp1 = n;
       n1 = temp1 / 1000;
       temp2 = temp1 % 1000;
       n2 = temp2 / 100;
       temp1 = temp2 % 100;
       n3 = temp1 / 10;
       n4 = temp1 % 10;
       
       printf ("le cifre che compongono %d sono %d %d %d %d", n, n1, n2, n3, n4);
    
       system ("pause");
       return 0;
    }
    Questo per quattro cifre. Altrimenti lo modifichi di conseguenza.

  8. #8
    Anche questo metodo funziona però c'è da stare attenti: con l'aumento delle cifre bisogna usare più variabili d'appoggio e più operazioni, diventerebbe assai scomodo con valori molto alti senza contare che bisognerebbe conoscere a priori la lunghezza del numero... Insomma molto più comodo con un itoa

  9. #9
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    int numero = xxx; //il numero di cui vuoi fare la somma delle cifre
    int somma;

    for(somma = 0; numero > 0; numero /= 10)
    somma += numero % 10;

    dopo il ciclo somma ha la somma delle cifre del numero.


    Mi ricorda l'esame di programmazione
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

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.