Не уверен, правильно ли я понял вашу проблему, но при условии, что у вас есть натуральное число x, которое может быть представлено m (например, 20) битами, но у вас есть только массивы из n битов (скажем, байтов, т.е. 8-битные массивы), количество необходимых вам массивов просто m / n округляется до следующего натурального числа. Для числа с 20 цифрами в двоичном формате это будет 3 байта.
например. если ваш номер
1001 01101100 10110100,
Вы можете сохранить его как
00001001
01101100
10110100.
То, что вы сделали, это
(целое число) разделите ваше число на 100000000 (10 ^ 1000 или 2 ^ 8 в десятичной системе), запишите остаток, урежьте результат
(целое число) разделите результат 1. на 100000000, запишите остаток, урежьте результат
(целое число) разделите результат 2. на 100000000, запишите остаток, урежьте результат
больше ничего интересного делать, потому что результат 3 был 0.
Предполагая, что мы говорим здесь о натуральных числах, в десятичной системе приведенное выше будет выглядеть так:
1. 617652/256 = 2412 remainder 180 (10110100 in binary system)
2. 2412/256 = 9 remainder 108 (01101100 in binary system)
3. 9/256 = 0 remainder 9 (00001101 in binary system)
Итак, что вы делаете, это
while (number > 0) {
divide number by 2^n
remember remainder
truncate number
}
Восстановление исходного номера оставлено в качестве упражнения:)
Это действительно проблема, которая возникает, когда вы хотите иметь дело с очень большими целыми числами на компьютере. Я думаю, что хорошее место для поиска дополнительной информации может быть http://en.wikipedia.org/wiki/Positional_notation.