Liczenie ile cyfr ma liczba C++

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;
}



}
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.

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";
}
1

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

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.
0

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

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).

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;
}
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.

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;
}
0

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

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