Odwrócenie liczby

bl4ster
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Lublin
  • Postów: 197
0

Chodzi o funkcję, która odwróci kolejność cyfr liczby całkowitej dodatniej, np. 123 -> 321
Moja implementacja:

Kopiuj
unsigned int invert (unsigned int value)
{
    unsigned int inverted = 0;
    while (value>0)
    {
        inverted = inverted*10 + value%10;
        value = value/10;
    }
    return inverted;
}

Coś tu warto poprawić?

edit: znalazłem szczególny przypadek, np dla liczby 0123 funkcja się sypie, jak można temu zaradzić?

lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5069
0

A jakby: toString, teraz postawić warunek: nie od zera please, odwrócić Stringa i toInt?

bl4ster
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Lublin
  • Postów: 197
0

Kod wtedy może i ładniej wygląda, ale nadal nie działa z zerami:

Kopiuj
int odwroc (int n)
{
    std::string str = std::to_string(n);
    std::reverse(str.begin(), str.end());
    return std::atoi(str.c_str());
}

dla 0123 wynik 38
dla 1230 wynik 321 //no powiedzmy, że tu jest ok

lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5069
0

Przecież Musisz wcześniej przeiterować string, żeby odrzucić początkowe zera, a pozostały substring odwrócic i zmienić na inta. Wszystkie metody, i iteratory do tego są w klasie string.

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
0

Jeżeli przekazujesz liczbę jako int, to skąd wiesz że było jakiekolwiek wiodące zero?

lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5069
0

U mnie: int a = 022;, na przykład, się kompiluje.

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.