Ilość cyfr w liczbie i ich suma

0

Witam
Mam do zrobienia program, który ma obliczyć ilość cyfr w liczbie i ich sumę. Z pierwszą częścią sobie poradzilem, ale druga coś nie chce działać. Zrobiłem coś takiego i nie wiem gdzie jest błąd. Pomożecie?

#include <stdio.h>
#include <math.h>
main()
{
int i,x,z;
//czesc obliczajaca ilosc cyfr
scanf("%d",&i);
x=i;
i=log10(i)+1;
printf("%d\n",i);

//obliczanie sumy - tu mam problem
z=x/(pow(10,i-1));
i=i--;
while(i>=1)
{
          x=x-pow(10,i);
          z=z+(x/pow(10,i-1));
          i--;
          }
printf("%d",z);

system("pause");
return 0;
}
 
0

Aby obliczyć ilość cyfr musisz dzielić liczbę przez 10 i inkrementować licznik, jeśli wynik z dzielenia jest większy od 0; Jeśli jest mniejszy - inkrementować licznik i wyjść z pętli;

Aby obliczyć sumę wystarczy odczytywać kolejne modulo z dzielenia przez 10 i dodawać je do sumy; Pomyśl nad tym;

0
int suma = 0;
int ilosc_cyfr = 0;
int liczba = 4321;
int x = 0;
while( x= liczba % 10){// x jest ostania czescia liczby np 4321 % 10 = 1
suma += x;
ilosc_cyfr++;
liczba = liczba / 10; dzielimy calkowicie przez 10 co z 4321 zostanie nam 432
}
//thats all baby
 
0

a może zamienić liczbę na string, jego długość to ilość cyfr (otwarta kwestia przecinka w liczbach rzeczywistych)
biorąc kolejne elementy stringa, zamieniasz na liczbę i sumujesz. Będzie chyba szybsze (nie ma dzielenia)

0
zefir napisał(a)

a może zamienić liczbę na string

A może...? Przecież to w jaki sposób wykonasz ten algorytm tylko i wyłącznie zależy od Ciebie; Jeśli przeraża Cię matematyka to zamień tę liczbę na łańcuch - będzie Ci łatwiej odczytać ilość cyfr i wykonać resztę obliczeń;

Jeśli interesuje Cię takie rozwiązanie - zrób to; Jeśli musisz wykonać to opierając program jedynie na obliczeniach - przysiądź trochę nad tym; Tak jak wspomniał serdeczny kolega @Wibowit - nie wszystko da się rozwiązać od razu, trzeba się czasem przespać z problemem; To samo polecam Tobie - zastanów się nad tym nie siedząc przy komputerze, jeśli nie jesteś pewien swoich obliczeń to rozrysuj sobie taki algorytm i przeleć na mniejszej liczbie obliczając na papierze wszystko; Napisz najpierw algorytm w pseudojęzyku i prześledź go pod względem poprawności; Później wystarczy jedynie napisać to w C i przetestować;

zefir napisał(a)

Będzie chyba szybsze (nie ma dzielenia)

No tego bym nie powiedział, ale dla tych liczb, które chcesz przetestować większej różnicy nie będzie (nagim okiem nie do zauważenia) chyba, że napaprzesz tam niezłe bzdety :P

Najpierw zrób taki żeby działał, a później go zoptymalizuj; Na razie nie masz nic, więc nie ma się nad czym bardziej zastanawiać;

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