 |
|
 |
| Precedente :: Successivo |
Autore |
Messaggio |
|
|
feys88 Novizio
Registrato: 30/07/09 09:59 Messaggi: 1
|
Inviato: Dom Ott 11, 2009 5:43 pm Oggetto: problema somma delle cifre di un intero |
|
|
premesso che ho iniziato da poco a programmare questo è il testo del problema
/*scrivere un programma in C che inserito in input un intero sommare tutte le cifre del numero inserito da tastiera.
esempio:
n=1034 ouput=8
n=56 output=11
n=123 output=6 */
questo è il codice che ho scitto io ma mi funziona solo su alcuni input, comunque non mi convince sull'algoritmo che ho adoperato questo è il codice:
#include<stdio.h>
int main(){
int n,p,i,mem,cont_uno,cont_due,cont_tre,z;
int somma=0;
scanf("%d",&n); // 1034
z=n; //1034
p=n/10; // 103
mem=p*10; // 103*10=1030
cont_uno=0;
for (i=mem;i<n;i++){ // 1030<1034
cont_uno++;}
z=z/10; // 1034/10=103
p=z/10; // 103/10=10
mem=p*10; //100
cont_due=0;
for (i=mem;i<z;i++){ //100<103
cont_uno++;}
somma=cont_uno+cont_due;
//printf("%d",somma);
z=n;
z=z/10; //1100/10=110
p=z/10; //110/10=11
mem=p*1; //11*1=11
mem=z/mem;
cont_tre=0;
for (i=mem;i<=z/10;i++){ //0<1
cont_tre++;}
somma=somma+cont_tre;
printf("%d",somma);
return 0;} |
|
Top |
|
 |
cali1981 Site Admin
Registrato: 16/01/06 22:01 Messaggi: 836
|
Inviato: Lun Ott 12, 2009 10:51 am Oggetto: |
|
|
Ciao, non capisco bene il tuo algoritmo (ad essere sincero non me lo sono guardato tutti, mi sembra abbastanza contorto), comunque per fare quello che devi fare tu basta che dopo lo scanf converti l'intero in stringa con itoa, poi della stringa risultante prendi una lettera alla volta, la riconverti in intero con atoi e fai la somma di tutti questi interi. Ti poso un codice di esempio che però non ho testa, di sicuro mancano molte cose:
| Codice: |
#include<stdio.h>
int main(){
int n,p,i,mem,cont_uno,cont_due,cont_tre,z;
int somma=0;
char buffer [33], buffer2[2];
char *charPtr;
int somma = 0;
scanf("%d",&n); // 1034
itoa (n,buffer,10);
charPtr = buffer;
while(charPtr)
{
somma += atoi(*charPtr);
}
printf("La somma è %d",somma);
}
|
ho detto che potrebbe non funzionare, ma scrivendolo mi piace proprio sto codice, forse funziona anche!
 _________________ Visita anche il sito Agriturismo Umbria per maggiori informazioni sull'Umbria!
Realizzazione siti web e applicazioni ASp.NEt, C/C++, C# |
|
Top |
|
 |
ixamit Novizio
Registrato: 27/09/09 11:23 Messaggi: 4
|
Inviato: Mar Ott 13, 2009 8:58 am Oggetto: |
|
|
Io lo avrei scritto così:
| Codice: |
#include <stdio.h>
#define MAXBUF 16
int main ()
{
char buf[MAXBUF],*pbuf;
int intero,somma;
printf ("Input number: ");
scanf ("%d",&intero);
snprintf (buf, MAXBUF-1,"%d",intero);
for (somma=0,pbuf=buf;*pbuf;pbuf++)
somma+=*pbuf-48;
printf ("intero is %d \nsomma is %d\n",intero,somma);
return 0;
}
|
Saluti,
Max |
|
Top |
|
 |
cali1981 Site Admin
Registrato: 16/01/06 22:01 Messaggi: 836
|
Inviato: Mar Ott 13, 2009 10:28 am Oggetto: |
|
|
Forte anche questa soluzione! Grazie!
| ixamit ha scritto: |
Io lo avrei scritto così:
| Codice: |
#include <stdio.h>
#define MAXBUF 16
int main ()
{
char buf[MAXBUF],*pbuf;
int intero,somma;
printf ("Input number: ");
scanf ("%d",&intero);
snprintf (buf, MAXBUF-1,"%d",intero);
for (somma=0,pbuf=buf;*pbuf;pbuf++)
somma+=*pbuf-48;
printf ("intero is %d \nsomma is %d\n",intero,somma);
return 0;
}
|
Saluti,
Max |
_________________ Visita anche il sito Agriturismo Umbria per maggiori informazioni sull'Umbria!
Realizzazione siti web e applicazioni ASp.NEt, C/C++, C# |
|
Top |
|
 |
ixamit Novizio
Registrato: 27/09/09 11:23 Messaggi: 4
|
Inviato: Mar Ott 13, 2009 10:14 pm Oggetto: |
|
|
Questo giro di MOD e DIV è eccezionale! (non è farina del mio sacco)
| Codice: |
#include <stdio.h>
int main ()
{
int intero,somma=0;
int x;
printf ("Input number: ");
scanf ("%d",&intero);
x=intero;
while (x)
{
somma+=x%10;
x/=10;
}
printf ("intero is %d \nsomma is %d\n",intero,somma);
}
|
Saluti,
Max |
|
Top |
|
 |
otacon Novizio
Registrato: 02/09/10 02:03 Messaggi: 3
|
Inviato: Gio Set 02, 2010 2:17 am Oggetto: |
|
|
un altra implementazione
| Codice: |
#include <stdio.h>
int main(){
char c;
int number[10], somma = 0;
int i = 0, j;
printf("inserire un numero: ");
while((c = getchar()) != EOF && c != '\n' && i < 10){
number[i++] = c - '0';
}
for(j = 0; j < i; j++){
somma += number[j];
}
printf("la somma delle cifre è : %d\n", somma);
return 0;
} |
|
|
Top |
|
 |
louispicc Novizio
Registrato: 26/07/10 13:37 Messaggi: 5
|
Inviato: Gio Set 02, 2010 7:58 am Oggetto: |
|
|
| otacon ha scritto: |
un altra implementazione
| Codice: |
#include <stdio.h>
int main(){
char c;
int number[10], somma = 0;
int i = 0, j;
printf("inserire un numero: ");
while((c = getchar()) != EOF && c != '\n' && i < 10){
number[i++] = c - '0';
}
for(j = 0; j < i; j++){
somma += number[j];
}
printf("la somma delle cifre è : %d\n", somma);
return 0;
} |
|
Carino, ma a questo punto perche' usare l'array e poi sommare i valori nell'array? Meglio sommare direttamente mentre inserisce senza usare le variabili number, i e j
Qualcosa del tipo (riutilizzo il tuo codice modificandolo qui e la)
| Codice: |
#include <stdio.h>
int main(){
char c;
int somma = 0;
printf("inserire un numero: ");
while((c = getchar()) != EOF && c != '\n'){
somma += c - '0';
}
printf("la somma delle cifre è : %d\n", somma);
return 0;
} |
|
|
Top |
|
 |
otacon Novizio
Registrato: 02/09/10 02:03 Messaggi: 3
|
Inviato: Gio Set 02, 2010 9:18 am Oggetto: |
|
|
eh si ancora meglio
l' avevo fatto solo nel caso in cui si volesse ristampare il num originale |
|
Top |
|
 |
|
|
|
|
Non puoi inserire nuovi argomenti Non puoi rispondere a nessun argomento Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi
|
|