![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Witaliy |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 43 Пол: Мужской Реальное имя: Witaliy Репутация: ![]() ![]() ![]() |
Добрый день всем!
Я учюсь решать задачи, но никак не могу найти подходящей справки по длинной арифметике. Пожалуйста, дайте полный пример кода на Паскале для решения такой задачи: За 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) Буду благодарен за любую помощь. Спасибо! |
Ozzя |
![]()
Сообщение
#2
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
При ограничениях
Цитата (1 <= N, M, K <= 1000000000 (10^9) ) длинная арифметика ни к чему. LongInt перекрывает этот интервал как минимум в 2 раза. |
Witaliy |
![]()
Сообщение
#4
|
Новичок ![]() Группа: Пользователи Сообщений: 43 Пол: Мужской Реальное имя: Witaliy Репутация: ![]() ![]() ![]() |
Да, ето я видел, спасибо.
Понимаете, мне етот алгоритм не понятный какой-то... Нраиться мне такой: 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 - |
Witaliy |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 43 Пол: Мужской Реальное имя: Witaliy Репутация: ![]() ![]() ![]() |
Мне бы конкретный пример робочей программы для обчисление 2^N при N <=1000, ш=щитать должно до 1 сек.
Спасибо. |
![]() ![]() |
![]() |
Текстовая версия | 21.04.2025 6:18 |