[ Emp @ 21.10.2005. 21:43 ] @
Kako odrediti sumu cifara odredjenog broja?
Npr. suma cifara broja 123.0601 je 13.

Za cijeli broj bih uradio nesto ovako:
Code:
int sumaCifara(float arg){
   
    int z,x,y;
    y=0;z=arg;
    while (z!=0){
    x=z%10;
    y+=x;
    z=z/10;}
    return y;
}


Ali ne znam kako bih uradio za dio broja iza zareza/tacke.
Mada vjerovatno nije najbolje ni cijeli dio broja ovako izracunati kao sto sam ja to uradio.
Znaci ime funkcije je: int sumaCifara(float arg) i ona treba da izracunava sumu svih cifara broja.
Pomoc dobrodosla:)
[ IDE @ 21.10.2005. 23:15 ] @
ma vjerovatno moze na milion nacina...

ja se ne bih mnogo razmisljao i napravio bih f-ju kojoj saljemo broj i koja "razbija" broj na dva dijela,dakle uzima kao cijeli broj onaj dio brojeva prije zareza i kao drugi cijeli broj onaj dio koji se nalazi iz zareza....

dakle sad bi nasatala dva broja:

iz 123.0601 imamo a=123 i b=0601, dalje, f-ja bi sabrala cifre ovih brojeva i napokon sumu dobijenih suma....



eto ti jedan predlog....
[ D3adly @ 22.10.2005. 11:58 ] @
Ispisi decimalni broj u string , pa racunaj... :))
[ NrmMyth @ 22.10.2005. 20:14 ] @
@EMP
A sta ako ti je broj iracionalan ili ima periodican decimalni dio?
[ Emp @ 22.10.2005. 21:32 ] @
E da,zaboravio sam da dodam da treba da se smatra da broj arg nema više od 6 decimalnih mjesta.
Uglavnom cijeli zadatak glasi ovako :
Napisati funkciju int sumaCifara(float arg) koja izračunava sumu svih cifara broja arg. Na primjer, sumaCifara(123.0601)=13. Smatrati da broj arg nema više od 6 decimalnih mjesta.

Poceo sam u C-u da radim prije nedelju dana tako da je svaka pomoc u vidu coda dobrodosla

[ X Files @ 23.10.2005. 12:17 ] @
Probaj ovako /NETESTIRANO/ :

Code:

/* ... */
#include <stdio.h >
/* ... */
int sumaCifara( double arg ) 
{
   int i, sum= 0;
   char buffer[50];
   
   sprintf( buffer, "%.6f", arg );

   for ( i=0; i<=strlen(buffer); i++ )
      if ( isdigit( buffer[i] ) )
         sum += buffer[i] - '0'; 

   return ( sum );
}




[Ovu poruku je menjao X Files dana 23.10.2005. u 15:45 GMT+1]
[ NrmMyth @ 23.10.2005. 12:35 ] @
Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define TO_INT 48

int main(void) {
    double dbr= 5.0/3;
    char str[50];
    
    sprintf(str,"%.7g\0",dbr);
    printf("%s\n",str);
    
    int i=-1;
    int suma=0;
    
    while(str[++i]!='\0') {
          if(str[i]=='.')
               continue;
          else 
               suma+=str[i]-TO_INT;
    }
    
    printf("%d\n", suma);
    
    system("pause");
    return 0;
}
[ Emp @ 29.10.2005. 13:32 ] @

Posto je uslov zadatka "Smatrati da broj arg nema više od 6 decimalnih mjesta." jednostavno sam pomnozio broj za 1.000.000 i uradio ga kao obican broj.
Ali vas code radi i za vishe od 6 mjesta.Super.
Hvala vam na pomoci.
[ X Files @ 29.10.2005. 13:58 ] @
Razlog ogranicenja na ne vise od 6 decimalnih mesta (iza zareza) je zbog
problematike (preciznosti) samog tipa 'float'. Rezultati se mogu razlikovati od
kompajlera do kompajlera... Zato sam predlozio da koristis 'double'.

Mnozenje sa 1000000 moze imati probleme ako je tvoj broj u startu veliki. Jesi
li ispitao taj slucaj?