2016-01-30 4 views
0

Я пытаюсь обрабатывать большие числа в C++. Одна вещь, которую я пробовал, - это установка библиотеки gmp, но она не работает должным образом на моем компьютере (см. this post). Поэтому я хочу попробовать другой метод, и это целое число для преобразования строк.Использование и идея целочисленного преобразования строк

Но я не понимаю об этом. Позвольте мне пояснить. Например, мы обрабатываем большое целое число. Допустим, 2^1000. Когда, например, я хочу рассчитать 2^1000 mod 10, это невозможно (пока я знаю) с обычными библиотеками C++. Поэтому мой вопрос: Возможно ли при преобразовании моего целого числа в строку, и если да? Как я могу выполнять арифметические операции при преобразовании целого числа в строку.

+0

Вы можете использовать небольшую теорему Ферма, чтобы легко вычислить остаток mod 5. Теперь каждая сила 2 четна, поэтому вы также знаете остальную модель 10. (Итак, ответ 6) –

+0

Напротив. Оператор Modulo проще всего вычислять для чисел формата 'x^y', где x относительно мало, а y - конечное число любого размера. Все, что вам нужно знать, это то, что '(x^y)^z = x^(y * z)' и применить mod-оператор к базе мощности. –

ответ

0

Если вы используете предопределенный целочисленный тип C++, то 2^1000 просто невозможно. В вашей системе максимум должен быть 2^16 или 2^32, макс. 2^64 (для long long). Если вы хотите это сделать, вам нужно (или реализовать себя - то, что я не рекомендую) целые числа с бесконечной точностью.

Вы можете преобразовать нормальный int в строку очень легко с

... = std::to_string(/*Your int*/); 

Если вы имеете в виду вы хотите сделать что-то вроде этого:

amazing_to_string_conversion(1000000000000000000000000000000000000000000000) 

Это не возможно в любой реализации C++. Сама константа числа не может существовать в коде, она будет много раз переполняться.

И если вы решите реализовать его самостоятельно, это, вероятно, К.О. вы из-за очень сложных вычислений во время деления и нетривиальных вычислений, таких как sqrt().

+0

Спасибо, у меня 64-битный компьютер, поэтому возможно 2^64. Но я не понимаю, как дополнительная библиотека, такая как gmp, может обрабатывать большие целые числа. Как это возможно, если мой компьютер 64 бит? – Qas

+0

Потому что он не использует int. Он работает с строками и имитирует целые числа. – xinaiz

+0

Хорошо, но невозможно выполнить арифметические операции со строкой? Итак, как вы можете тогда вычислить? – Qas