Porównywanie dowolnie długich liczb

0

Aktualnie piszę moduł do obliczeniach na dowolnie dużych liczbach i zaciąłem się na porównywaniu liczb.
Dla przykładu weźmy liczby np.499 i 500.
Pierwszy algorytm jaki wpadł mi na myśl, to porównywanie każdej z liczb liczby 499 z liczbą 500 i wyglądałoby to tak (sprawdzanie czy liczba jest mniejsza):

1.Na początek przyjmujemy, że liczba jest mniejsza [wynik=true].
2.Porównujemy długości obu liczb i w zależności od wyniku ustawiamy wynik na true/false i wychodzimy z funkcji.
3.Obie liczby są takiej samej długości, więc możemy bezproblemowo porównać każdą liczbę:
     4<5 | ok!
     9>0 | wynik=false; wychodzimy z funkcji

No i kicha; z tego algorytmu wyszłoby, że 499>500 :/

Ma ktoś może jakiś lepszy sposób na porównywanie liczb?

3

Jeśli obciąłeś nieznaczące zera i liczby po tym mają taką samą długość to zjadasz po jednej cyfrze z obu ciągów, załóżmy że to cyfry a i b.

Jeżeli:

  • a > b - liczba z cyfrą a jest większa,
  • a < b - liczba z cyfrą b jest większa,
  • a = b - trzeba sprawdzić kolejne cyfry,
0

Czy a jest wieksze od b, zwraca true jeżeli równe, do małej poprawki:

bool porownaj(char a[], char b[])
{
   if(strlen(a) != strlen(b))
   {
      if(strlen(a) > strlen(b))
      {
         return true;
      }
      else
      {
         return false;
      }
   }

   for(int i = strlen(a); i > 0; i--)
   {
      if(static_cast<int>b[i] > static_cast<int>a[i]) return false;
   }

   return true;
}

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