Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Тип данных Extended


Автор: gambit 6.10.2006, 17:13
Привет. Расскажите как в проге использовать очень большие числа например 10 в 1000 степени?
нашел тип данных Extended но как им пользоваться не знаю(как переводить в integer и использовать в циклах). Помогите. smile 

Автор: Rodman 6.10.2006, 17:21
вооще то в цыкле можно использовать только integer, но большие числа он не потянет... Есть такой тип как Int64... не пробовал, но может тебе поможет

Автор: ivan219 6.10.2006, 17:37
А зачем тебе цикл длинной в
Цитата

10 в 1000 степени

 smile 

Автор: Snowy 6.10.2006, 17:44
Числа такого размера потянет только string.

Автор: volvo877 6.10.2006, 17:48
Цитата(Rodman @  6.10.2006,  16:21 Найти цитируемый пост)
Есть такой тип как Int64... не пробовал, но может тебе поможет 
Не поможет... Int64 может хранить значения в интервале -/+ (2^63 - 1), а человеку надо до 10^1000

gambit, для работы с такими значениями тебе придется использовать длинночисленную арифметику (пример см. в DRKB)

Автор: Rodman 6.10.2006, 17:49
может лучше будет использовать while... 

Автор: gambit 6.10.2006, 20:22
Цитата

А зачем тебе цикл длинной в

Цитата

10 в 1000 степени



Я готовлюсь к чемп. мира. В прошлом году у меня была задача:
Дано 2 числа одно(а) от 100 до 10 в 1000 степени другое(в) от 1 до 999
Надо из числа "а" вывести "в" кол-во vax цифр.

В принципе я задачу сделал но у меня её не приняли, она не прошла тест с большими числами.
Вот я и подумал как можно использовать такие числа???
А вдруг на этом чемпионате будет подобное.
Код

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var f : textfile;
var a, c, b, q,h :int64;
var s:string;
var m: array of integer;
var m1: array of integer;
var i,j:integer;
begin
assignfile(f,'input.txt');
reset(f);
readln(f,a,h);
closefile(f);

s:=inttostr(a);
c:= length(s);      //определение кол-во цифр

setlength(m,c);     //определение размерности массива
setlength(m1,c);
q:=a;

for i:=0 to c-1 do  // занесение в массив значений
begin
m[i]:= q mod 10;
q:=q div 10;
end;

for i:=0 to c-1 do  // занесение в массив значений
begin
m1[i]:= 10;
end;

for j:=0 to c-1 do
begin
for i:=0 to c-1 do
begin
 if m1[j]>m[i] then
begin
m1[j]:=m[i];
b:=i;
end
else
m1[j]:=m1[j];
end;
m[b]:=10;
end;

s:='';

for i:=c-1 downto c-h do
begin
s:=s+inttostr(m1[i]);
end;

assignfile(f,'output.txt');
rewrite(f);
writeln(f,s);
closefile(f);

end.

Автор: Sunvas 6.10.2006, 20:48
Цитата(Rodman @  6.10.2006,  17:49 Найти цитируемый пост)
может лучше будет использовать while...  

Или Repeat...

Автор: ivan219 7.10.2006, 09:36
Цитата

Дано 2 числа одно(а) от 100 до 10 в 1000 степени другое(в) от 1 до 999
Надо из числа "а" вывести "в" кол-во vax цифр.

А обясни поподробнее что это такое smile 

Автор: Albinos_x 7.10.2006, 10:13
можно использовать 
Цитата

Extended    
  10-битовый вещественный,  19-20 значащих цифр  
  -1,1е+4932..-1,9е-4951 /  1,9е-4951..1,1е+4932   
 

Цитата(gambit @  6.10.2006,  20:22 Найти цитируемый пост)
Вот я и подумал как можно использовать такие числа???

испльзовать цыклы с пред и пост условием, может где-то рекурсии... проверять на возможное переполнение для обеспечения необходимых расчётов... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)