Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2008, 19:07   #1
antoha.by
Пользователь
 
Регистрация: 29.04.2008
Сообщений: 32
Вопрос Выделение памяти

У меня такая проблемма, решаю задачу и в ней указано что число должно быть такое N<=10^300(10 в 300-й степени);
Это значит нужно выделять память размером в сколько-то байт чтоб это число можно было ввести. Ведь максиумом из стандартных типов является
longint, но его не достаточно.
Я делал так присваивал переменной a:^longint; (динамическая переменная)
дальше делал так:
new(a);
getmem(a,16384); (выделяю память размером в 16384 байта)
и вводил число большее чем 2147483647(максиум типа longint)
программа не работала, ведь для типа longint выделяется всего 4 байта а я ввел 16384 байт зн. по идее я мог вводить астрономические числа типа 10^300 но этого не происходит.
Пожалуйста помогите я не знаю как это сделать?
antoha.by вне форума Ответить с цитированием
Старый 29.04.2008, 19:41   #2
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Я когдато от нечево делать написал код для работы с большим числом.
А точнее: перемножение очень большого числа на однозначное.
Принцип был основан на массиве. Я кстати щас погуглил и наткнулся на примеры где тоже юзают массивы.. значит надо делать через массивы.

Код:
Uses
  SysUtils;

Var Num, Num2 : String;
    i, v, Len : Integer;
    Temr : array [0..100] of Integer;

Begin
Write ('Vvedite bolshoe 4islo  ');
Readln(Num);
Readln(num2);

Len := Length(Num);

// Перемножаем.
For i := 0 To (Len - 1) Do
  Begin
   v := StrToInt(Num[Len - i]) * StrToInt(Num2);
   Temr[i] := Temr[i] + v mod 10;
   Temr[i + 1] := Temr[i + 1] + v div 10;
  End;

// Выводим число
For i := 1 To Len Do
  Write(IntToStr(Temr[Len - i]));

Readln;
End.
Это типа мой блатной код

А вот как предлагают делать:
http://forum.sources.ru/index.php?showtopic=72091
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 29.04.2008, 20:04   #3
antoha.by
Пользователь
 
Регистрация: 29.04.2008
Сообщений: 32
По умолчанию

Ок. Спасибо!
antoha.by вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
До выделение памяти MAKTE Общие вопросы C/C++ 4 20.05.2008 21:34
Выделение данных John Pepper Microsoft Office Excel 3 10.05.2008 19:09
Выделение памяти в функции для переданных параметров LinuxUser Общие вопросы C/C++ 1 12.11.2007 19:21
выделение оперативной памяти Alar Общие вопросы Delphi 0 29.10.2006 21:56