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


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

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


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


Гость






При ограничениях
Цитата
(1 <= N, M, K <= 1000000000 (10^9) )
длинная арифметика ни к чему. LongInt перекрывает этот интервал как минимум в 2 раза.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


Мне бы конкретный пример робочей программы для обчисление 2^N при N <=1000, ш=щитать должно до 1 сек.
Спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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