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ę.
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ę.
Google, nie wiem ile on obsluguje ale wiecej niz standardowy.
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;
Tylko po co ten stos [???] Jak i tak argumenty i wynik sa przechowywane w stringu (i jak to TP to sa ograniczine jego pojemnoscia)
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;
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ź.
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.
bc na cygwinie ?