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

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:

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

}
0

Spróbuj bez "potęgowania".

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?

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.

1

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

	while (n > 0) {
		print(n % 10)
		n /= 10
	}
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:

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>

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

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