Для работы с большими числами надо использовать массивы. Этот вопрос регулярно появляется, на этом форуме тоже был. Попробуй поискать.
В твоей задаче лучше сначала создать массив массивов представляющий степени двойки в новой системе исчисления. Ну, конечно, надо ограничиться какой-то максимальной разрядностью входного двоичного числа
Код: Выделить всё
// пример создаваемого массива массивов
// bits[0] = [1];
// bits[1] = [2];
// bits[2] = [4];
// ....
// bits[12] = [2, 1];
// bits[13] = [4, 2];
// ...
newbase = 4094;
maxsize = 1024;
bits[] = [];
bits[0] = [1];
for i=1; i<maxsize; i++
L = lenght(bits[i-1]);
overflow = 0;
for k=0; k<L; k++
bits[i][k] = bits[i-1][k] * 2 + overflow;
if bits[i][k] >= newbase
bits[i][k] -= newbase; overflow = 1;
else
overflow = 0;
end if
end for
if overflow then bits[i][L] = 1;
end for
Будем считать, что входное число представлено массивом "0" и "1". Если очередной разряд содержит "1", то просто по-разрядно прибавляем к результату соответствующий массив (из первого куска кода)
Код: Выделить всё
in = [];
out = [];
for i=0; i<length(in); i++
next unless in[i]
for L=0; L<length(bits[i]); L++
out[L] += bits[i][L];
end for
end for
Вот и все. Возможно, надо еще будет полученный массив out привести в нормальный вид (всмысле, чтобы значение конкретного разряда не превышало основание системы)
Для работы с большими числами надо использовать массивы. Этот вопрос регулярно появляется, на этом форуме тоже был. Попробуй поискать.
В твоей задаче лучше сначала создать массив массивов представляющий степени двойки в новой системе исчисления. Ну, конечно, надо ограничиться какой-то максимальной разрядностью входного двоичного числа
[code]
// пример создаваемого массива массивов
// bits[0] = [1];
// bits[1] = [2];
// bits[2] = [4];
// ....
// bits[12] = [2, 1];
// bits[13] = [4, 2];
// ...
newbase = 4094;
maxsize = 1024;
bits[] = [];
bits[0] = [1];
for i=1; i<maxsize; i++
L = lenght(bits[i-1]);
overflow = 0;
for k=0; k<L; k++
bits[i][k] = bits[i-1][k] * 2 + overflow;
if bits[i][k] >= newbase
bits[i][k] -= newbase; overflow = 1;
else
overflow = 0;
end if
end for
if overflow then bits[i][L] = 1;
end for
[/code]
Будем считать, что входное число представлено массивом "0" и "1". Если очередной разряд содержит "1", то просто по-разрядно прибавляем к результату соответствующий массив (из первого куска кода)
[code]
in = [];
out = [];
for i=0; i<length(in); i++
next unless in[i]
for L=0; L<length(bits[i]); L++
out[L] += bits[i][L];
end for
end for
[/code]
Вот и все. Возможно, надо еще будет полученный массив out привести в нормальный вид (всмысле, чтобы значение конкретного разряда не превышало основание системы)