Poszukiwany kalkulator z dużym limitem ilości cyfr

0

Szukam kalkulatora (aplikacji) zdolnego dodawać liczby naturalne z dokładnością do jedności o ilości cyfr większej niż 100 (a nie np. 1.341123123123 * 10^123). Jeśli zna ktoś taki, to proszę o nazwę.

Z góry dziękuję.

0

Google, nie wiem ile on obsluguje ale wiecej niz standardowy.

0

Napisz sobie taki kaluklator na stosach. Bardzo prosta implementacja a liczba może mieć tyle cyfr ile hmm, prawie tyle ile masz RAMu :)

Aż Ci nawet pomogę, bo robiłem takie coś na ASD. Listing w TP.

type
  PElement = ^TElement;
  TElement = record
    Prev: PElement;
    Data: Integer;
  end;

  { -- POCZATEK FUNKCJI STOSU -- }

procedure Push(Element: Integer; var St: PElement);
var
  Top, List: PElement;
begin
  New(Top);
  Top^.Data := Element;
  Top^.Prev := nil;
  if St = nil then St := Top else
    begin
      Top^.Prev := St;
      St := Top;
    end;
end;

function Pop(var St: PElement): Integer;
var
  Del: PElement;
begin
  Pop := 0;
  if St <> nil then
    begin
      Pop := St^.Data;
      Del := St;
      if St^.Prev = nil then St := nil else St := St^.Prev;
      Dispose(Del);
    end;
end;

function Empty_s(St: PElement): Boolean;
begin
  Empty_s := St = nil;
end;

 { -- KONIEC FUNKCJI STOSU -- }

function Zsumuj(A, B: String): String;
var
  n, m, p, p1, p2: Integer;
  S1, S2, S3: PElement;
  S: String;
begin
  { wyzerowanie stosow }
  S1 := nil; S2 := nil; S3 := nil;

  { wrzucenie liczb na stos }
  for n := 1 to Length(A) do
    Push(Ord(A[n]) - Ord('0'), S1);

  for n := 1 to Length(B) do
    Push(Ord(B[n]) - Ord('0'), S2);

  { zsumowanie liczb }
  p := 0;
  while (not Empty_s(S1)) or (not Empty_s(S2)) do
    begin
      if Empty_s(S1) then p1 := 0 else p1 := Pop(S1);
      if Empty_s(S2) then p2 := 0 else p2 := Pop(S2);
      p := p1 + p2 + p;
      Push(p mod 10, S3);
      p := p div 10;
    end;

  { pobranie wyniku z stosu wynikowego }
  S := '';
  while not Empty_s(S3) do
    S := S + Chr(Pop(S3) + Ord('0'));
  if p <> 0 then S := '1' + S;
  Zsumuj := S;
end;
0

Tylko po co ten stos [???] Jak i tak argumenty i wynik sa przechowywane w stringu (i jak to TP to sa ograniczine jego pojemnoscia)

0
function Dodaj (a, b: string) : string;
{ Funkcja dodaje dwie duze liczby. }
var
  C : String;
  Przeniesienie, I, Liczba : Byte;
begin
  C := '';
  while Length(B) < Length(A) do B := '0' + B;
  while Length(A) < Length(B) do A := '0' + A;

  Przeniesienie := 0;
  for I := Length (A) downto 1 do
  begin
    Liczba := Ord(A[I])+Ord(B[I])-2*Ord('0') + Przeniesienie;
    Przeniesienie := Liczba div 10;
    Liczba := Liczba mod 10;
    C := Chr(Liczba+Ord('0')) + C;
  end;

  if (Przeniesienie > 0) then
    if Length(C)=255 then
      RunError(201)
    else
      C := Chr(Przeniesienie+Ord('0')) + C;
  Dodaj := C;
end;
0
foflik napisał(a)

Tylko po co ten stos [???] Jak i tak argumenty i wynik sa przechowywane w stringu (i jak to TP to sa ograniczine jego pojemnoscia)

Bo akurat na ASD robiliśmy stos i taki przykładowy sposób użycia :P A po co zmieniać/tworzyć nowe jak jest gotowiec, do tego to miała być wskazówka, nie gotowa odpowiedź.

0

na linuxie jest bc. jezeli musisz koniecznie uzywac pod windowsem, to poszukaj, moze jest jakis odpowiednik, a moze kod zrodlowy da sie skompilowac pod winda.

0

bc na cygwinie ?

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