Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Liczenie ile cyfr jest w liczbie

Ostatnio zmodyfikowano 2019-04-14 23:10
Autor Wiadomość
nanoant20
» 2019-04-13 22:00:04
No ale ja sie chce dowiedziec co w tym jest zle
wytłuściłem Ci to
P-174409
pekfos
» 2019-04-13 22:03:19
C/C++
double x;
cin >> x;
for( int i = 0; x < 1; i++ )
{
    cout << x / 10 << i;
}
x się nie zmienia, warunek w pętli jest zły. Najwyraźniej nie mówimy w tym samym języku - 'dziel przez 10 aż' znaczy, że masz modyfikować liczbę, a nie tylko wykonywać działanie. Zakładając liczby dodatnie, liczby większe równe 10 mają więcej niż jedną cyfrę. Każda liczba ma co najmniej jedną cyfrę. Więc zaczynaj liczenie od 1 i dziel przez 10, dopóki liczba jest większa równa 10.
Jeśli użyłeś double umyślnie, to trzeba by zapytać, czy chcesz też liczyć cyfry po przecinku. Jeśli tak, powinieneś wczytywać liczbę jako tekst, bo żaden typ ułamkowy wbudowany w C++ nie zachowa liczby cyfr po przecinku.
P-174410
Kubaa321
Temat założony przez niniejszego użytkownika
» 2019-04-13 22:05:27
To co zamiast double. Sorry ale ucze sie dopiero
P-174411
pekfos
» 2019-04-13 22:08:53
int, na przykład. double też może być, tylko że jeśli używasz tego typu dlatego, że może trzymać ułamki, bo chcesz w 123.45 policzyć 5 cyfr, a nie 3, to wiedz że do tego nie nadaje się żaden typ liczbowy wbudowany w C++.
P-174412
jankowalski25
» 2019-04-14 00:04:46
daje wynik 0
Zwróć uwagę na to, że nie istnieje liczba zerocyfrowa. Jak startujesz od zera, to porównanie z dziewiątką od razu zatrzyma pętlę, więc w wyniku dostaniesz zero. Dlatego lepiej jest od razu wystartować od jedynki w liczniku cyfr.

(dla n>1 czy n>9)
Jeśli weźmiesz n>1, to wynik dla zera i jedynki będzie inny niż dla wartości od 2 do 9. Porównanie z dziewiątką jest właśnie po to, aby nie było takich problemów i dla wszystkich wartości od 0 do 9 pętla się zatrzymywała (bo mają tyle samo cyfr).

może na innym systemi i kompilatorze wychodzą inaczej?
Nie. Jeśli program jest poprawnie napisany, to wyniki będą takie same. Właśnie o to mi chodziło, aby pokazać, dlaczego tam dziewiątka pasuje, a porównanie z jedynką działa błędnie.
P-174413
nanoant20
» 2019-04-14 00:08:54
Nie. Jeśli program jest poprawnie napisany

//edit o.k przetestowałem sobie wszystkie uwagi

  • wszystko zależy od wartości startowej jakią przyjmuje licznik i warunku jaki jest stawiany
  • racja - lepiej jest stawiać warunek (n>9) i licznik = 1;
  • racja - kompilator oraz system nie mają wpływu na wynik  (sprawdziłem)

najbezpieczniej i najprościej jest to napisać w
while
 z licznik = 1;


Dzięki serdeczne za zwrócenie uwagi, nie zauważyłem tego problemu wcześniej, ponieważ nie podstawiałem liczb 1-cyfrowych, a na pewno nie podstawiałem wartości 0 i 1 D




P-174414
Kubaa321
Temat założony przez niniejszego użytkownika
» 2019-04-14 10:59:32
Poprawi ktos ten kod zeby bylo wszystko dobrze?

#include <iostream>

using namespace std;
{


int n;
{


std::cin >> n;
int nToString = std::to_string(n).length();
std::cout << nToString;
}
}
P-174415
pekfos
» 2019-04-14 12:00:52
Nie masz funkcji main(), nie dołączasz <string>.
P-174417
1 2 « 3 » 4
Poprzednia strona Strona 3 z 4 Następna strona