После обсуждение алгоритмов поиска чисел в строке Возникла идея рассмотреть в том же духе и некоторые другие задачи.
Задача перевода целого числа из шестнадцатеричного в десятичное показалось подходящим: не очень громоздким, хотя бы с одним очевидным алгоритмом и, возможно, множеством неочевидных, и понятным.
Дана строка, содержащая неотрицательное целое число в шестнадцатеричном формате.
Номер записывается цифрами 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; }Теги: #изучение #языки программирования #Алгоритмы #Ненормальное программирование
-
Детская Речь
19 Oct, 24 -
Релиз Quake Live
19 Oct, 24 -
Cocos2D-X И Так Легко На Всех Устройствах
19 Oct, 24