Jak za[isac liczbe wieksza niz Longint

0

Mam do zrobienia cos takiego
2 do potegi 'n' tylko ze n ma byc np 100
Czyli 2 do potegi 100
ale jak wpisuje longint to mi wyskakuje 0
jak wyswietlic liczbe wieksza niz 9 cyfr

0

Mam do zrobienia cos takiego
2 do potegi 'n' tylko ze n ma byc np 100
Czyli 2 do potegi 100
ale jak wpisuje longint to mi wyskakuje 0
jak wyswietlic liczbe wieksza niz 9 cyfr

A przecież twój wynik nie musi być liczbą całkowitą (w sensie typów całkowitych), przecież możesz zwracać funkcją wartość Real a nawet Extend, a potem obcinasz część ułamkową.

function DwaDoPotegiN(n:integer):Real;
var i:integer;
begin
Result:=2;
if n=0 then Result:=1
else
for i:=2 to n do Result:=Result*2;
end;

0

jak zrobie ta procedurke to mi wyskakuje wynik taki
np n=5

3.20000000E+001

A ma byc np ze 32 i koniec
ajak wpsize 70
to zeby np wyskakiwal wynik do 80 cyfr
HELP :(

0

A poczytaj sobie w helpie o funkcji FormatFloat. To co Ci dałem wczesniej to tylko wstępna koncepcja, która wylicza poprawną wartość. Samo wyświetlanie to już formatowanie wyniku.

0

Do wyznaczania tak dużych liczb musisz napisać własną arytmetykę. 2^100 to inaczej 1267650600228229401496703205376 - a to raczej sporo..

2^1000 =
1071508607186267320948425049060001
8105614048117055336074437503883703
5105112493612249319837881569585812
7594672917553146825187145285692314
0435984577574698574803934567774824
2309854210746050623711418779541821
5304647498358194126739876755916554
3946077062914571196477686542167660
429831652624386837205668069376

Tak dla wiadomości :)

0

N owlasnie jak to obliczyc zeb ysie wyswietlin ka kompie taki wynik ???

0

Hm... Ja kiedyś pisałem taki moduł do operacjach na dużych liczbach (do 100 cyfr) - dodawanie, odejmowanie, dzielenie, mnożenie. Działało to na idei takiej, jak dodajesz sobie liczby pisemnie :) ort!, a znajdziesz :)

0

Takie dzialania na duzych liczbach mozna wykonac za pomoca stringow.
W jaki sposob? poprzednik powiedzial, tak jak sie to robi pisemnie.
Masz tu gotowe procki na podstawowe dzialania matematyczne (niestety bez dzielenia bo mi sie juz nie chcialo)
Moze pomoze:

function dodaj(s1,s2:string):string;
var i,j,k,dalej,s:integer;
    s3,s4:string;
begin
i:=Length (s1);
j:=Length (s2);
dalej:=0;
if i>=j then
begin
s3:='';
for k:=0 to i do
begin
s:=strtoint(s1[length(s1)-k])+strtoint(s2[length(s2)-k])+dalej;
dalej:=0;
if s>10 then
begin
s:=s-10;
dalej:=1;
end;
s3:=s3+inttostr(s);
end;
end;

if i<j then
begin
s3:='';
for k:=0 to i do
begin
s:=strtoint(s2[length(s2)-k])+strtoint(s1[length(s1)-k])+dalej;
dalej:=0;
if s>10 then
begin
s:=s-10;
dalej:=1;
end;
s3:=s3+inttostr(s);
end;
end;

s4:='';
for k:=1 to length(s3) do
s4:=s4+s3[length(s3)-k];
dodaj:=s4;
end;


function odejmij(s1,s2:string):string;
var i,j,k,dalej,s:integer;
    s3,s4:string;
begin
i:=Length (s1);
j:=Length (s2);
dalej:=0;
if i>=j then
begin
s3:='';
for k:=0 to i do
begin
s:=strtoint(s1[length(s1)-k])-strtoint(s2[length(s2)-k])+dalej;
dalej:=0;
if s<0 then
begin
s:=s+10;
dalej:=-1;
end;
s3:=s3+inttostr(s);
end;
end;

if i<j then
begin
s3:='';
for k:=0 to i do
begin
s:=strtoint(s2[length(s2)-k])-strtoint(s1[length(s1)-k])+dalej;
dalej:=0;
if s<0 then
begin
s:=s+10;
dalej:=-1;
end;
s3:=s3+inttostr(s);
end;
end;

s4:='';
for k:=1 to length(s3) do
s4:=s4+s3[length(s3)-k];
odejmij:=s4;
end;

function mnoz(s1,s2:string):string;
var i,j,k,l,dalej,s:integer;
    s31,s32,s33,s3,s4:string;
begin
i:=Length (s1);
j:=Length (s2);
dalej:=0;
s32:='0';
if i>=j then
begin
s31:='';
for k:=0 to i do
begin
s:=strtoint(s1[length(s1)-k])-strtoint(s2[length(s2)-k])+dalej;
s31:=s31+inttostr(s);
end;
end;

s4:='';
for k:=1 to length(s3) do
s4:=s4+s3[length(s3)-k];
end;
0

mała autoreklama: zerknij sobie do http://4programmers.net/view_file.php?id=1354 - tam masz funkcję vlshl, czyli potęgowanie 2 do dowolnego stopnia.

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