Значит, такие дела. In: Число (DEC), система счисления (DEC) Out: Число (СИ)
Система от 2ичной до 36ичной. Внимание! Число может быть от 0 до 10^9
Знаю тупой алгоритм: пишем входное число в целочисленную переменную, ищем максимальную степень для основания новой СС, и посимвольно выводим ответ, для каждого символа подбирая множитель и выводя его. Но... тут не хватает размеров интежера и лонга. А как иначе реализовать - идей пока нет. Помогите пожалуйста.
Вторая проблема: In: Число (BIN) Out: Число (HEX)
Я сделал сначала перегнав число в 10чную, потом - в 16чную. Получил на сабмиттере превышение лимита по времени на 1 из тестов. Получается, надо переводить напрямую в 16. Как это сделать?
Внимание! Стандартные функции перевода СС юзать нельзя. Допустим бородатый ANSI C
_________________ Все что не убивает, делает тебя еще слабее и ущербнее, пока смерть наконец не заберет тебя, тонущего в луже собственного дерьма.
var i: Integer; begin result := ''; // right-to-left scan while (v > 0) do begin i := v mod pwr; Assert (i < Length (tab), 'large pwr!'); result := tab[i + 1] + result; // for PASCAL strings using index from 1 to Length(s) v := v div pwr; end; if Result = '' then result := '0'; end;
function b2hex (bs: String): String;
const tab: string = '0123456789ABCDEF';
var n: Integer; v: byte; begin result := ''; while Length (bs) < 4 do bs := '0' + bs; // complete n := 1; // WARN: pascal strings // left-to-right scan while (n < Length (bs)) do begin
v := ( Byte ( bs [n + 3] ) - $30 ); v := v + ( Byte ( bs [n + 2] ) - $30 ) shl 1; // v += ( bs [n + 2] - 0x30 ) << 1; // C-style expression v := v + ( Byte ( bs [n + 1] ) - $30 ) shl 2; v := v + ( Byte ( bs [n + 0] ) - $30 ) shl 3;
Не понимаю, какие проблемы с integer 32 bit? Один миллиард отлично размещается, даже два с небольшим. Впрочем, при желании можно докопаться и до double значений подобным алгоритмом. Язык Це подзабыл, уже собираюсь Шарп изучать, так что исходник пока только такой.
_________________ Плавайте поездами Аэрофлота! И синий BSOD нам заменяет небосвод...
Сейчас этот форум просматривают: kisulja и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения