| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > сравнивание больших чисел |
| Автор: valerchi 21.11.2010, 16:43 |
| Мужики, помогите, может кто знает, есть ли такая функция сравнивания (< > =) больших чисел с типом string? |
| Автор: Wildklas 21.11.2010, 17:35 | ||
Сначала нужно подсчитать кол-во символов в строчке с помощью ф-и Length(Str), тоесть
а потом уже сравнивать. |
| Автор: valerchi 21.11.2010, 20:50 |
| Не хочется изобретать велосипед. Может есть готовая функция? |
| Автор: THandle 21.11.2010, 22:22 | ||
Что нибудь типа этого думаю. Положительное значение результата - 1 число больше, отрицательное - меньше. Если равны то 0. |
| Автор: Keeper89 21.11.2010, 22:22 | ||
Что имеется ввиду? |
| Автор: valerchi 22.11.2010, 00:42 |
| THandle, Спасибо, выручил. |
| Автор: valerchi 22.11.2010, 09:45 | ||||
Какую подлянку? |
| Автор: valerchi 22.11.2010, 10:07 | ||
Keeper89,
Что имеется ввиду? Имеется ввиду, что числа в длинной арифметике записываются как строка (тип string)? и я спросил, есть ли такая функция, которая может сравнить и определить, какое из двух сравниваемых чисел, записанных в строку, больше, а какое меньше, или может они равны... |
| Автор: ama_kid 22.11.2010, 10:35 | ||||||||
Ну подлянку - не подлянку, для тривиальных случаев проканает, просто внимательно надо пользоваться, к примеру, избавляться от ведущих и хвостовых нулей:
И вообще, THandle указал направление, просто его развить надо, дополнить разными граничными условиями. Люди ведь не зря пишут целые библиотеки, посвященные работе с большими числами. Кстати, если погуглить - можно найти какие-нибудь исходники, посвященные этой теме. |
| Автор: XperT 22.11.2010, 14:43 |
| THandle, Первое число может быть "001", а второе "99" и ваша функция даст не верный результат |
| Автор: Akella 22.11.2010, 15:20 |
| Лучше переводить в число и сравнивать. |
| Автор: valerchi 22.11.2010, 15:47 | ||
Всмысле, переводить в тип integer или вещественный? Но дело в том, что перевести не получается, - сильно числа большие (70 - 100 значные) |
| Автор: THandle 22.11.2010, 23:43 |
| XperT, как сказал ama_kid это просто самый элементарный пример сравнения. Все конечно зависит от того что за числа, какая запись и тд. |
| Автор: Keeper89 22.11.2010, 23:55 |
| valerchi, создай отдельный класс, и предусмотри проверки, так будет получше. |
| Автор: valerchi 23.11.2010, 09:03 | ||
Звучит как-то сложновато... А не проще сделать так, - создать ф-цию в которой каждый символ будет переводиться в тип integer (не всё число сразу, а по одному символу), и сравниваться? |
| Автор: aleksh 23.11.2010, 13:05 | ||||
это какую
что ли? |
| Автор: valerchi 23.11.2010, 17:33 | ||
В принципе мне и это подходит. Результат точный. Ещё раз спасибо. |
| Автор: valerchi 24.11.2010, 00:10 | ||||||
Если s - это строка, а i - номер символа, то вроде бы так. |
| Автор: aleksh 24.11.2010, 11:59 |
| tovalerchi: вопросительный знак там шутки ради, просто продемонстрировал отсутствие необходимости создавать отдельную функцию |
| Автор: valerchi 24.11.2010, 13:46 | ||
Почему?... А взять два числа, а перевести каждый символ в отдельности в тип integer, а затем сравнить их, а заключить это всё в цикл, а минус перед числом учесть, а запятую? И т.д. и т.п. Вот это всё и нужно объединить в функцию. |
| Автор: THandle 24.11.2010, 18:28 |
Что то мне подсказывает, что это будет работать довольно медленно... |
| Автор: aleksh 24.11.2010, 19:07 | ||
так зато не долго |
| Автор: Keeper89 24.11.2010, 21:50 | ||
Зато получится нормальная вещь, позволяющая не посылать каждое число в функцию, гибко обработать:
и много еще чего (10 запятых, 50 минусов, разные длины и т.д.), примеры ama_kid привел. |
| Автор: AntonN 24.11.2010, 22:24 |
| глянь тут модель для длинной арифметики http://forum.sources.ru/index.php?showtopic=285453 |