Suma cyfr ciągu znaków

0

Witam, mam do napisania program, który po wpisaniu liczby, sprawdzi ile cyfr ma dana liczba i obliczy sume tych cyfr. Niżej umieszczam moj kod, lecz problem jest z suma ponieważ sumują się wartości odpowiadające danym liczbom w kodzie ascii (np. dla 123 suma wyswietla sie 150) próbowałem również z getchar ale jest dokładnie to samo, jedyne rozwiązanie jakie mi przychodzi do głowy to odejmowanie od kazdej cyfry 48. Czy zna ktoś lepszy sposób ?

 
#include <stdio.h>
int main(){
	int i=0,nl=0;
	int suma=0;
    char tab[21];
    int b;
    
    scanf("%s",tab);
    
    while(tab[i]!=0)
    {
                    nl++;
                    suma=suma;
                    i++;
    }
    printf("%d\t%d",nl,suma);
    getch();
    return 0;    
} 
1

A co jeślibym ci pedzioł, że możesz policzyć liczbę cyfr w liczbie bez jej zamiany na ciąg znaków?
Słyszałeś o logarytmie dziesiętnym?

jedyne rozwiązanie jakie mi przychodzi do głowy to odejmowanie od kazdej cyfry 48. Czy zna ktoś lepszy sposób ?

No ale to jest jedyne sensowne rozwiązanie ;p

0

To raczej musi być wprowadzone jako ciągów znaków ponieważ liczbę wprowadza sie bez znaków białych

Sensowne zrozumienie tego zdania naprawdę zajmuje za dużo czasu.
Rozumiem, że wczytujesz liczbę w formacie np. 1 000 000 i dlatego nie możesz wykorzystać %d, prawda?

a po co ten logarytm, jakie byłoby jego zastosowanie ?

Pierwsze primo: nie rób spacji przed znakiem zapytania;
Drugie primo: jeśli wczytywałbyś liczbę jako inta, za pomocą logarytmu dziesiętnego mógłbyś wyznaczyć liczbę jej cyfr (teraz zauważyłem, że to i tak akurat w tym przypadku nie miałoby sensu, ponieważ liczenie cyfr mógłbyś połączyć z pętlą sumującą).

Anyway, więc wracając do meritum wątku: odejmowanie 48 to jedyna sensowna opcja.

0
Patryk27 napisał(a):

To raczej musi być wprowadzone jako ciągów znaków ponieważ liczbę wprowadza sie bez znaków białych

Sensowne zrozumienie tego zdania naprawdę zajmuje za dużo czasu.
Rozumiem, że wczytujesz liczbę w formacie np. 1 000 000 i dlatego nie możesz wykorzystać %d, prawda?

jeżeli bym skorzystał z %d to musiałbym użyc petli i scanf a wtedy mógłbym wprowadzić liczbę tylko ze znakami białymi lub całość do jednej komórki

2
#include <stdio.h>
#include <ctype.h>

int main()
  {
   int cnt,sum,ch;
   for(cnt=sum=0;isdigit(ch=getchar());++cnt) sum+=ch-'0';
   printf("%d\t%d",cnt,sum);
   return 0;    
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1