Liczenie ile cyfr ma liczba C++

Odpowiedz Nowy wątek
2019-04-13 23:12
0

Cześć. Napisałby mi ktos kod programu który liczy ile cyfr ma liczba. (np 425 składa sie z 3 cyfr) w c++
To mój kod ale on nie działa (nie wiem czemu)

#include <iostream>

using namespace std;

int main()
{

double x;
cin>>x;
    for(int i=0; x<1; i++)
{
    cout << x/10 << i;
}

}
edytowany 2x, ostatnio: ŁF, 2019-04-15 11:47

Pozostało 580 znaków

2019-04-13 23:34
0

Jak sprawdzić, ile cyfr ma liczba?
Wszystko mniejsze od 10 to jedna cyfra.
Potem wszystko mniejsze od 100 to dwie cyfry.
Potem wszystko mniejsze od 1000 to trzy cyfry.
...
Jeśli w pętli będziesz daną liczbę l porównywał do kolejnych iteracji liczby 10 (jedną zmienną t = 1 w każdym obrocie pętli mnożysz przez 10), to po numerze iteracji dojdziesz do ilości cyfr. Kiedy nierówność l < t zostanie spełniona, to wychodzimy z pętli i wypisujemy numer iteracji.

edytowany 4x, ostatnio: Spine, 2019-04-13 23:40

Pozostało 580 znaków

2019-04-13 23:44
0

Pewnie da się do jakoś lepiej zapisać żeby nie robić milion ifów dla milion cyfrowej liczby, ale łeb mnie już boli i idę spać zaraz

#include <iostream>

using namespace std;

int main()
{
    double x;
    cin>>x;
    if(x/10000>=1)
        cout<<"Pięciocyfrowa\n";
    else if(x/1000>=1)
        cout<<"Czterocyfrowa\n";
    else if(x/100>=1)
        cout<<"Trzycyfrowa\n";
    else if(x/10>=1)
        cout<<"Dwucyfrowa\n";
    else if(x/1>=1)
        cout<<"Jednocyfrowa\n";
    else
        cout<<"Zerocyfrowa?\n";
}
edytowany 2x, ostatnio: au7h, 2019-04-13 23:45
Hmmm, to taki joke, prawda? - Spine 2019-04-13 23:48

Pozostało 580 znaków

2019-04-13 23:53
1

Hmm... @Kuba021, a takiej funkcji możesz używać? log10()

Pozostało 580 znaków

2019-04-14 00:02
1

ja zawszę konwertuje inta na stringa i liczę ile jest znaków. Działa? działa.

int n;
std::cin >> n;
int nToString = std::to_string(n).length();
std::cout << nToString; //np.

𝓜𝓮𝓷𝓽𝓪𝓵
𝓐𝓫𝓾𝓼𝓮
𝓣𝓸
𝓗𝓾𝓶𝓪𝓷𝓼
I jest do d*? Jest ! :-/ - Mokrowski 2019-04-14 12:21
no ale skoro tak uważasz to napisz czemu, bo właśnie taka opinia jest do d* :) - Sunnydev 2019-04-14 12:25
Oczywiście: Przykład z rozwiązaniem "przez string". Byłem uprzejmy i dodałem optymalizację "na wielkość": https://godbolt.org/z/5RDQ2k Przykład z logarytmem: https://godbolt.org/z/vgn4rZ Myślę że widać... Oczywiście można sobie odpuścić w jakimś Pythonie czy JS, ale od C i C++ wymaga się permanentnie wysokiej wydajności. Tu ma się "hopla" na tym punkcie... :-> - Mokrowski 2019-04-14 12:29
w porządku, masz rację, nie jest to wydajne, ale do zadań na studiach czy jakieś inne codility jest to wystarczające. Z resztą to tylko propozycja - to od @op zależy czy tego użyje, w końcu w wątku jest podane mnóstwo rozwiązań. - Sunnydev 2019-04-14 12:34
https://godbolt.org/z/STmv4c Aż się zdziwiłem, że mi się udało równie krótki kod wygenerować bez log10 :) Oba: http://cpp.sh/5vuxk - darkbit 2019-04-16 10:41

Pozostało 580 znaków

2019-04-14 01:36
0

Wystarczy policzyć ile razy trzeba podzielić liczbę przez 10, zanim liczba zejdzie do zera.


Nie pisz na priv. Zadaj dobre pytanie na forum.

Pozostało 580 znaków

2019-04-14 06:59
sig
2

Ta liczba może mieć przecinek? Jak tak, to chyba tylko wspomniana konwersja na string i potem usunięcie / odliczenie tegoż. Bo porównanie z potęgami 10 np dla 2.51 da błędy wynik, dzielenie przez 10 też nie zadziała. Pytam bo w pierwszym poście autor używa double (czyli typu z przecinkiem).

edytowany 1x, ostatnio: sig, 2019-04-14 06:59

Pozostało 580 znaków

2019-04-14 11:58
3

Korzystając z własności logarytmu:

#include <stdio.h>
#include <math.h>

int main(int argc, char *argv[])
{
  int i = 123123;

  printf("%d\n", (int)log10(i)+1);

  return 0;
}

Pozostało 580 znaków

2019-04-15 09:26
1

Dla zera rozwiązanie z logarytmem nie będzie działało. We wszystkich podanych rozwiązaniach typ ze znakiem, więc dla liczb ujemnych będą błędy przy obliczaniu ilości cyfr.

int nToString = n ? log10(abs(n)) + 1: 1; ... oczywiście jeśli obsługa zmiennego przecinka nie jest dostępna na danej platformie, iterować dzieląc będzie dopuszczalnym rozwiązaniem. Z całą pewnością konwersja przez string nie wygra z tymi sposobami co do wydajności. - Mokrowski 2019-04-16 12:42

Pozostało 580 znaków

2019-04-15 14:17
0

Mozesz to zrobic np tak

#include<iostream>
using namespace std;

int a,ile_cyfr;

int main()
{
    cin>>a;
    do{
        ile_cyfr++;
        a /= 10;
    }while(a != 0);
    cout<<ile_cyfr;
}

Pozostało 580 znaków

2019-04-15 14:22
0

Dla a typu double, warunek w pętli wystarczy zamienić na while (a >= 1).

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