IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Длинная арифметика
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 43
Пол: Мужской
Реальное имя: Witaliy

Репутация: -  0  +


Добрый день всем!

Я учюсь решать задачи, но никак не могу найти подходящей справки по длинной арифметике. Пожалуйста, дайте полный пример кода на Паскале для решения такой задачи:
За 1 рубль можна увеличить рост человека в К раз. Сколько нужно потратить денег для того, что-бы достич росту М (не обезательно ровно М, можно и больше, НО не меньше). Текущий рост - N
Например
(1 <= N, M, K <= 1000000000 (10^9) )
К=3 М=200 N = 8

Решыть это можно так:
умножать n на К пока n < m

тоисть

while n < m do
n := n*k;

Но мне нужно организировать при 1 <= N, M, K <= 1000000000 (10^9)
Буду благодарен за любую помощь.

Спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 43
Пол: Мужской
Реальное имя: Witaliy

Репутация: -  0  +


Да, ето я видел, спасибо.
Понимаете, мне етот алгоритм не понятный какой-то...
Нраиться мне такой:

const NMax = 2000;
type digit = 0..9;
dlchislo = array[1..NMax] of digit;


Для ввода будет так:

procedure translate(s : string; var a :dlChislo; ok : boolean);
var i : word;
begin
zero(a);
i := length(s); ok := true;
while (i >= 1) and ok do
begin
if s[i] in ['0'..'9'] then
a[length(s) - i+1] := ord(s[i]) - 48
else ok := false; i := i-1;
end;
end;


Тегами пользуйся для оформления исходников...

Такой алгоритм мне кажеться понятнее, чем тот что вы дали

Тут розряды записани наоборот, тоисть в масиве сначала йдуть десятки, потом сотни и т.д. например число 125 записано как 521


Мне бы организировать и другие операции, например деление, сравнение...
Буду благодарен.

Добавлено через 2 мин.
Цитата
длинная арифметика ни к чему. LongInt перекрывает этот интервал как минимум в 2 раза.


Ладно, извините, ошибся, припустим что ограничение 10^30

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 13.09.2025 3:14
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name