Конвертация Hex->Dec - Ищем Красивые Решения

После обсуждение алгоритмов поиска чисел в строке Возникла идея рассмотреть в том же духе и некоторые другие задачи.

Задача перевода целого числа из шестнадцатеричного в десятичное показалось подходящим: не очень громоздким, хотя бы с одним очевидным алгоритмом и, возможно, множеством неочевидных, и понятным.

Дана строка, содержащая неотрицательное целое число в шестнадцатеричном формате.

Номер записывается цифрами 0.9A.F (буквы только заглавными), в строке гарантировано отсутствие нецифровых символов.

Вам необходимо получить строку, содержащую десятичную запись такого числа.

Длина входной строки не превышает 100000 байт. Пишите решения на любых языках – самых красивых, самых коротких, самых эффективных.

Для решений на машине Тьюринга предлагаю использовать только символы «пробел, 0, 1» (новые не вводить), и запись входных и выходных чисел четверками бит (через пробелы или нет – на ваше усмотрение).

На Brainfuck - необходимо ввести входную строку и вывести на печать.

УПД.

Использовать встроенный или библиотеку BigNum — это, конечно, хорошо, но как-то не очень интересно.

Давайте обойдемся без этого! В качестве отправной точки вот решение на C# (которое не является ни красивым, ни коротким, ни эффективным):

 
         static unsafe string Hex2Dec(string x) {
             int l=x.Length;
             int ll=l+l/4+3;
             sbyte[] m=new sbyte[ll];
             int i=l;
             foreach(char c in x) m[--i]=(sbyte)(c<'A' ? c-'0' : c-'A'+10);
             int lk=ll;
             while(l>0) {
                 int k=0,l1=0;
                 while(l>0) {
                     k=(k<<4)+m[--l];
                     m[l]=(sbyte)(k/10);
                     if(l1==0 && k>=10) l1=l+1;
                     k%=10;
                 }
                 m[--lk]=(sbyte)(k+48);
                 l=l1;
             }
             string res;
             fixed(sbyte *c=m){ res=new string(c,lk,ll-lk); }
             return res;
         }
 
Теги: #изучение #языки программирования #Алгоритмы #Ненормальное программирование
Вместе с данным постом часто просматривают: