C++ - Zamiana liczby zapisanej w liście na reprezentację binarną.

Odpowiedz Nowy wątek
2018-01-12 20:12

Rejestracja: 2 lata temu

Ostatnio: 2 lata temu

0

Cześć!
Potrzebuję wskazówki.
Chciałabym operować na dowolnie wielkich liczbach, dlatego mam do dyspozycji stworzoną strukturę listy dwukierunkowej.
Chciałabym, aby podana liczba całkowita (zarówno ujemna, jak i dodatnia) wpisana w tą listę została zamieniona na jej reprezentację U1.
Pobieram liczbę z klawiatury, po jednej cyfrze, każda kolejna wstawiana jest na koniec, pierwszy element listy, jeśli liczba ma być ujemna, jest mnożony razy -1.
Liczba binarna chciałabym, aby została zapisana w nowej liście.

Czy jest to w ogóle możliwe? Jeśli tak, to uprzejmie prosiłabym o wskazówki co do algorytmu.

edytowany 1x, ostatnio: johan, 2018-01-12 20:13

Pozostało 580 znaków

2018-01-14 12:10

Rejestracja: 3 lata temu

Ostatnio: 29 minut temu

0

Tu jest na stringach, ale z listą będzie analogicznie, wystarczy przeciążyć operator [] i gotowe :)
https://www.geeksforgeeks.org[...]-compute-mod-of-a-big-number/
https://www.geeksforgeeks.org[...]ge-number-represented-string/
Skleciłem na szybko metodą kopiuj wklej

#include<iostream>
using namespace std;

int mod(string num, int a)
{
    int res = 0;
    for (int i = 0; i < num.length(); i++)
         res = (res*10 + (int)num[i] - '0') %a;

    return res;
}

string longDivision(string number, int divisor)
{
    string ans;

    int idx = 0;
    int temp = number[idx] - '0';
    while (temp < divisor)
       temp = temp * 10 + (number[++idx] - '0');

    while (number.size() > idx)
    {
        ans += (temp / divisor) + '0';
        temp = (temp % divisor) * 10 + number[++idx] - '0';
    }

    if (ans.length() == 0)
        return "0";

    return ans;
}

int main()
{
    string dec = "173819709879078906547567456767823423498013890375894300875938579234273859385483752";
    string bin;

    if(dec != "0")
    {
        while(dec != "0")
        {
            bin.insert(bin.begin(), '0'+mod(dec, 2));
            dec = longDivision(dec, 2);
        }
    }
    else
    {
        bin = "0";
    }

    cout<<bin<<endl;
}

Pozostało 580 znaków

Odpowiedz

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