Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++]Klasa do obsługi ogromnych typów całkowitych (o długości równej i większej niż 2048 bity)

Ostatnio zmodyfikowano 2014-07-16 18:36
Autor Wiadomość
krzysztof.kolski
Temat założony przez niniejszego użytkownika
[C++]Klasa do obsługi ogromnych typów całkowitych (o długości równej i większej niż 2048 bity)
» 2014-07-16 11:48:07
Jak w temacie, potrzebuje klasy dającej mi możliwość działania na b. dużych liczbach całkowitych (może być bez znaku).

Wiadomo, wszystko można zrobić samemu ale pewnie znajdzie się coś gotowego.
Możecie coś zaproponować :)?
P-113856
pekfos
» 2014-07-16 12:44:31
Frazy, które należy wpisać w wyszukiwarkę google:
P-113857
Dragonit
» 2014-07-16 18:36:43
Dam ci przykład dodawania do siebie ogromnych liczb. Pewnie ci się przyda.

C/C++
#include <iostream> // dołączenie modułu głównego
#include <string> // dołączenie modułu obsługi ciągów znaków

using namespace std; // deklaracja przestrzeni nazw std, dzięki temu nie będzie trzeba pisać std::cout, std::cin itp.

int main()
{
    string l1, l2; // deklaracja zmiennych łańcuchowych przechowujących liczby
    cout << "Liczba 1 : "; // wyświetlenie zapytania o pierwszą liczbę
    cin >> l1; // pobranie wartości pierwszej liczby
    cout << "Liczba 2 : "; // wyświetlenie zapytania o drugą liczbę
    cin >> l2; // pobranie wartości drugiej liczby
    int dl1 = l1.length(), // deklaracja zmiennej liczbowej + wczytanie do niej liczby znaków pierwszej liczby
    dl2 = l2.length(), // deklaracja zmiennej liczbowej + wczytanie do niej liczby znaków drugiej liczby
    dl; // // deklaracja zmiennej liczbowej potrzebnej do ustalenia, która liczba ma być u góry dodawania pisemnego
    dl =( dl1 > dl2 ) ? dl1
        : dl2; // ?: - operator warunkowego wartościowania, jeśli wynik logiczny dl1 > dl2 = 1 (prawda)
    // to wartością dl będzie dl1, jeśli logiczny wynik będzie równy 0, to wartością dl będzie
    // dl2
    string wynik; // deklaracja zmiennej wyniku
    int p = 0; // deklaracja zmiennej liczbowej z wartością 0
    for( int i = 1; i <= dl; i++ ) // deklaracja zmiennej dla pętli; warunek zakończenia; zmienne dla pętli zwiększa wartość o 1 po każdym wykonaniu
    {
        int d =(( i <= dl1 ) ?( l1[ dl1 - i ] - '0' )
            : 0 ) + // jeśli zmienna pętli jest mniejsza od liczby znaków liczby dl1 to znak [dl1-i] (czyli zaczynając dodwanie od końca ciągu) jest wartością do dodania, w przeciwnym razie 0(( i <= dl2 ) ?( l2[ dl2 - i ] - '0' )
            : 0 ) + p; // jeśli zmienna pętli jest mniejsza od liczby znaków liczby dl2 to znak [dl2-i] (czyli zaczynając dodwanie od końca ciągu) jest wartością do dodania, w przeciwnym razie 0 dodając poprzednią wartość p, która przy pierwszym wykonaniu pętli wynosi 0
        wynik = char(( d % 10 ) + '0' ) + wynik; // (d % 10) - zapisywanie liczb w systemie dziesiątkowym + '0' (wartość zera dla char'a)
        p = d / 10; // liczba która będzie na początku wyniku
    }
    if( p ) // jeśli p jest większe od 0
         wynik = char( p + '0' ) + wynik; //
   
    cout << l1 << " + " << l2 << " = " << wynik << endl; // wpisanie całego działania na ekran
    system( "PAUSE" ); // czekaj na przyciśnięcie dowolnego klawisza...
}
.
P-113868
« 1 »
  Strona 1 z 1