Problem z pętlą modulo - HackerRank: Find Digits

Problem z pętlą modulo - HackerRank: Find Digits
Krzysztof Rosłaniec
  • Rejestracja:prawie 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:2
0

Cześć, od niedawna próbuje swoich sił w C++, aktualnie rozwiązuje jakieś bazowe zagadnienia z serwisu HackerRank. Utknąłem w jednym miejscu, gdzie w żaden sposób nie mogę dojść co robię nie tak w pętli. Co aktualnie próbuję zrobić to rozbić liczbę podaną jako INT na poszczególne cyfry. Robiąc "na piechotę" obliczenia dla tej samej liczby którą wrzucam w pętle (1234) wychodzą mi dwa różne wyniki:

Kopiuj
int main(){
int a, b, c, d, e, f;
cout << "Podaj liczbe: ";
cin >> a;
b = (int)log10(a)+1; // określa nam liczbę cyfr w podanej liczbie;
int tab[b];
for (int i=0; i<b; i++)
{    
    g=a/(10^i);  //próbowałem również tab[i]=(a/(10^i))%10) oraz innych zabaw z nawiasami
    tab[i]=g%10;
}
for(int i=0; i<b; i++)
{
    cout<<tab[i]<<" ";
}

cout << "na gorze błędne wartości, na dole poprawne" << endl;

c=a%10;
d= a/10%10;
e = a/100%10;
f = a/1000%10;
cout << c << " ";
cout << d << " ";
cout << e << " ";
cout << f << " ";

}
edytowany 2x, ostatnio: cerrato
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0

Spróbuj bez "potęgowania".

Krzysztof Rosłaniec
  • Rejestracja:prawie 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:2
0
vpiotr napisał(a):

Spróbuj bez "potęgowania".

Dodałem zmienną int g = 1;
Na końcu pętli wrzuciłem g = g * 10;

W końcu poszło. Czyli najlepiej nie korzystać z potęgowania gdy jest inna opcja?

vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0
Krzysztof Rosłaniec napisał(a):
vpiotr napisał(a):

Spróbuj bez "potęgowania".

Dodałem zmienną int g = 1;
Na końcu pętli wrzuciłem g = g * 10;

W końcu poszło. Czyli najlepiej nie korzystać z potęgowania gdy jest inna opcja?

W C/C++ potęgowanie robi się tak: http://www.cplusplus.com/reference/cmath/pow/
ale to Ci nie da precyzyjnych wyników.

edytowany 1x, ostatnio: vpiotr
MarekR22
Eee....... tylko dla liczb zmiennoprzecinkowych
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:39 minut
  • Postów:4935
1

O co chodzi z tym potęgowaniem, prosta pętla tu wystarczy (nie działa dla zera):

Kopiuj
	while (n > 0) {
		print(n % 10)
		n /= 10
	}

edytowany 1x, ostatnio: lion137
MarekR22
to w końcu cpp czy inne cudo? Brak średników i nie ma takiego print w C++, ale kolorowanie składni dałeś cpp.
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:4 minuty
0
Krzysztof Rosłaniec napisał(a):

Cześć, od niedawna próbuje swoich sił w C++, aktualnie rozwiązuje jakieś bazowe zagadnienia z serwisu HackerRank. Utknąłem w jednym miejscu, gdzie w żaden sposób nie mogę dojść co robię nie tak w pętli. Co aktualnie próbuję zrobić to rozbić liczbę podaną jako INT na poszczególne cyfry. Robiąc "na piechotę" obliczenia dla tej samej liczby którą wrzucam w pętle (1234) wychodzą mi dwa różne wyniki:

Kopiuj
int main(){
int a, b, c, d, e, f;
cout << "Podaj liczbe: ";
cin >> a;
b = (int)log10(a)+1; // określa nam liczbę cyfr w podanej liczbie;
int tab[b];
for (int i=0; i<b; i++)
{    
    g=a/(10^i);  //próbowałem również tab[i]=(a/(10^i))%10) oraz innych zabaw z nawiasami
    tab[i]=g%10;
}
for(int i=0; i<b; i++)
{
    cout<<tab[i]<<" ";
}

cout << "na gorze błędne wartości, na dole poprawne" << endl;

c=a%10;
d= a/10%10;
e = a/100%10;
f = a/1000%10;
cout << c << " ";
cout << d << " ";
cout << e << " ";
cout << f << " ";

}

<sarkazm>
Nie wiedziałem, że hackerrank przyjmuje język polski jako odpowiedzi do zadania.
Jak ja z niego korzystałem to nawet angielskiego nie rozpoznawał.
</sarkazm>


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22
SnaaPP
  • Rejestracja:ponad 9 lat
  • Ostatnio:3 miesiące
  • Postów:20
0
Kopiuj
b = (int)log10(a)+1; // określa nam liczbę cyfr w podanej liczbie;
int tab[b];

Ktoś mnie oświeci dlaczego to działa, bo wydaje mi się, że b powinno być constem albo tab pointerem?

twonek
rozszerzenia kompilatora
rajszym
variable lenght array
BG
Tak jak napisał @rajszym - VLA. W C99 dostępne "w standardzie", w C++ tylko w niektórych kompilatorach jako rozszerzenie.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.