Wypisaniem zbioru cyfr, z jakich składa się zadana liczba rzeczywista

0

Mam problem z wypisaniem zbioru cyfr z jakich sklada sie dowolnie zadana liczba.
Przykładowe rozwiąznie: liczba -13332.465 sklada się ze zbioru cyfr: 1,2,3,4,5,6.

Wartości ujemnej pozbywam się abs(liczba).
Aby wypisać skladniki części calkowitej wystarczy zapęlić resztę z dzielenia.
Problem pojawia się z wypisaniem składu cyfr po przecinku.

4

Problem jest w zasadzie nierozwiązywalny, o ile nie korzystasz z jakiegoś typu rational. http://kaczus.ppa.pl/art/liczbyzmiennoprzecinkowe,19.html

0

Odpowiednio w C++ będzie inaczej, ale w Pythonie:

>>> math.floor(12.245 * 1000)
12245
>>> math.floor(12.0910 * 10000)
120910

I teraz już standartowo.

5
lion137 napisał(a):

Odpowiednio w C++ będzie inaczej, ale w Pythonie:

>>> math.floor(12.245 * 1000)
12245
>>> math.floor(12.0910 * 10000)
120910

I teraz już standartowo.

Python 3.6.5 (default, May 11 2018, 04:00:52)
[GCC 8.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> math.floor(1.2000018 * 10000000)
12000017
>>>
0

Hm... Widocznie dla wiekszych liczby trzeba uzyc jakis bigfloatow.

2

W taki sposób co najwyżej przesuniesz granicę bólu, ale musiałbyś jeszcze udowodnić, że dla zadanej dokładności wyniki są poprawne dla wszystkich przypadków. A problemem jest to, że zapis ułamków o podstawie 2 jest fundamentalnie niekompatybilny z zapisem o podstawie 10. Kiedyś nawet się o tym rozpisałem, ale to co najwyżej draft jakościowo.

0

Pozniej rzuce okiem na dokumentacje bigfloatow, czy da sie uzyskac zadana dokladnosc. Bo nie wyglada to rzeczywiscie przekonujaco.

0

Ja pomyślałem żeby konwertować na to na string i wypisywać co potrzeba, ale jednak nie jest tak kolorowo jak mi się wydawało.

0
przemyslowiec napisał(a):

Ja pomyślałem żeby konwertować na to na string i wypisywać co potrzeba, ale jednak nie jest tak kolorowo jak mi się wydawało.

A w zasadzie to czemu nie?:)

0

Jak wcześniej sprawdzałem to wypluwało nie poprawną postać - część dziesiętna różniła się od tej wprowadzonej. Ale jak teraz sprawdziłem to jest ok...
Właśnie odkryłem to przez abs() było zmieniane http://cpp.sh/5dfvn to jest kod z abs będzie źle po usunięciu będzie ok, wystarczy usunąć niepotrzebne zera i ewentualny przecinek.

0

Ale to ma dokładnie ten sam problem co przykłady z pythona powyżej...

0

A jak by pobierał to już jako string?

1

Jak masz liczbę zapisaną jako string to jak najbardziej możesz sprawdzić unikalne cyferki. Przy czym w tym momencie to ogólniejsza sprawa i liczysz unikalne znaki, a z liczbą to ma niewiele wspólnego.

0

Jak byś nie mógł wczytać jako string, to do wartości bezwzględnej z liczb "z przecinkiem" służy fabs()

0

co właściwie znaczy "dowolnie zadana liczba" bo jeśli po prostu podana jako string składający się z tych cyfr to zadanie jest trywialne, jeśli podana w sposób naprawdę dowolny to pytanie z jakiej postaci bierzemy te cyfry, na upartego zapisujemy binarnie i mamy cyfry 0 i 1 ;)

0

Wpisałem stringiem, pozbyłem się minusów itp. jezeli wystepowały i zamieniłem stringa na int przez użycie atoi. Z otrzymanego int już łatwo skład cyfr wyciągnąc.
Dziękuję za pomoc :)

0

A po co na int? znak z cyferką - '0' równa się ta cyfra, o tak

    string napis = "-123,45";
    for (size_t i = 0; i < napis.size(); i++ )
    {
        if (napis[i] >= '0' && napis[i] <= '9')
        {
            int cyfra = napis[i] - '0';
            // tu ją wysyłasz do kontenera
        }

    }

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