Suma cyfr ciągu znaków

Odpowiedz Nowy wątek
2015-12-06 20:39
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;    
} 

Pozostało 580 znaków

2015-12-06 20:53
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


edytowany 1x, ostatnio: Patryk27, 2015-12-06 20:54
To raczej musi być wprowadzone jako ciągów znaków ponieważ liczbę wprowadza sie bez znaków białych, a po co ten logarytm, jakie byłoby jego zastosowanie ? - pg2464 2015-12-06 21:04

Pozostało 580 znaków

2015-12-06 21:08
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.


edytowany 1x, ostatnio: Patryk27, 2015-12-06 21:09

Pozostało 580 znaków

2015-12-06 21:32
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

Pozostało 580 znaków

2015-12-06 21:49
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;    
  }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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