Действительно большие числа и Objective-C - PullRequest
2 голосов
/ 23 июня 2009

Я возился с некоторыми Project Euler проблемами и, естественно, сталкиваюсь с множеством проблем, требующих обработки чисел, больших long long. Я полон решимости использовать Какао и Objective-C (мне нужно быть осторожным в работе), но я не могу найти элегантный способ (читай: библиотека) для обработки этих действительно больших чисел.

Я бы хотел использовать GMP, но похоже, что использование его с XCode - это целый мир боли.

Кто-нибудь знает какие-либо другие варианты?

Ответы [ 6 ]

3 голосов
/ 23 июня 2009

На вашем месте я бы скомпилировал gmp вне XCode и использовал бы gmp.h и libgmp.a (или libgmp.dylib) в моем XCode проект.

1 голос
/ 29 апреля 2012

vBigNum в vecLib реализует 1024-битные целые числа (со знаком или без знака). Это достаточно большой?

1 голос
/ 23 июня 2009

Попробуйте сохранить цифры в массивах.

Хотя вам придется написать несколько новых функций для всех ваших арифметических задач, но именно так нам сказали делать это в колледже.

Плюс скорость вычислений была значительно улучшена, поскольку большие числа не были действительно большими и вообще не были цифрами

посмотрим, поможет ли это

1009 * привет *

0 голосов
/ 02 апреля 2014

Я всегда думал об использовании чит-библиотеки для этого проекта. Просто напишите класс с вещами, которые вам нужны. И не бойтесь использовать malloc, uint64_t и так далее. NSNumber не хорошая идея во многих случаях.

С другой стороны, существует много проблем, где очевидное решение потребует огромных или огромных количеств, и хитрость заключается в том, чтобы найти способ решить проблему без использования этих огромных чисел. (Например, какова сумма последней тысячи цифр факториала 1 000 000)?

0 голосов
/ 02 февраля 2013

Мне тоже пришла в голову блестящая идея попробовать некоторые проблемы проекта Эйлера с Cocoa / Objective-C, и они меня расстроили. Ранее я использовал Java и, возможно, немного PHP. Я отправил мою точную проблему в этой теме.

0 голосов
/ 24 июня 2009

Если вы хотите использовать matlab (или что-то похожее), вы можете посмотреть мою реализацию большой целочисленной формы (vpi) при обмене файлами.

Это довольно просто. Храните каждую цифру отдельно. Сложение и вычитание просты, просто реализовать операцию переноса. Умножения лучше всего делать с использованием свертки, а затем переноса. Реализуйте операторы split и mod, затем операцию powermod, полезную для многих проблем PE. Степени просты - просто повторное возведение в квадрат и умножение на основе двоичного представления показателя степени.

Это позволит вам решить многие проблемы PE.

...