2014-10-11 3 views
-4

Я хочу найти остаток от очень больших чисел. Я пишу программу для этого, и поскольку я не могу найти остаток напрямую из-за того, что они большие числа (в с). Как я могу это сделать? за номер, с которого я должен делить большее число, чтобы найти остаток является 500.ie 1 до 500 Я думал о делении числа так:Как найти остаток?

1234567 = 1 * 10^6 + 2 * 10^5 + ...

1234567% х = 1modx * 10^6modx + 2modx * 10^5modx ...

мне нужно лучше чем это.

+0

http://en.wikipedia.org/wiki/Modulo_operation –

+0

мне нужен более конкретный ответ, то это :) – user3851486

+0

Используйте оператор по модулю% –

ответ

1

Подсказка: Используйте связанный список. Храните номер в виде группы чисел динамически. Для например:

112233445566778899001122 => 11223344 55667788 99001122

Теперь рассмотрим отдельные единицы и начинают слева направо. Найдите напоминание и обработайте его, чтобы добавить к следующей группе и продолжить.

Теперь реализация очень легко :)

Edit:

112233445566778899001122/6 => 11223344 55667788 99001122/6 


11223344/6 =>2 

2*100000000 + 55667788 = 255667788 
255667788/6 => 0 
0*100000000 + 99001122 = 99001122 
99001122/6=>0 

So the reminder is 0. 

Помните, что индивидуальный блок после манипуляций должна быть при максимальном диапазоне INT может поддерживать.

+0

вы можете рассказать мне немного о манипуляции. Это кажется трудной задачей. – user3851486

+0

@ user3851486: Если вас устраивает ответ, upvote it :) – Inquisitive

+0

@ user3851486: Могу ли я получить наилучший ответ: P – Inquisitive

0

Если ваш вопрос касается использования очень длинного или большого числа, попробуйте использовать что-то long long. Проблема может заключаться в том, что тип данных, который вы используете, слишком мал, чтобы удерживать требуемые значения.

Вы можете попробовать использовать библиотеку bignum, такую ​​как GMP или другой вид уродливого способа сравнения, чтобы использовать массивы или списки, несколько похожие на this.

Кроме этого, операция modulo % рассчитает остаток для вас.

+0

может содержать 10000 цифр. – user3851486

+0

Хорошо. Попробуйте большую библиотеку чисел. Что-то вроде [GMP] (https://gmplib.org/). Для справки, возможно, посмотрите [здесь] (http://stackoverflow.com/questions/2440093/how-to-find-the-remainder-of-large-number-division-in-c). – Gordonium

+0

Я не хочу использовать такие библиотеки. У вас есть другое решение? – user3851486

Смежные вопросы