# Convert hex-> dec - looking for beautiful solutions

After discussing the algorithms for finding numbers in a string , an idea arose to consider some other tasks in the same vein. The task of converting an integer from a hexadecimal system to a decimal system seemed to be suitable: not very cumbersome, with at least one obvious algorithm and, perhaps, many non-obvious ones, and understandable.

Write solutions in any languages - the most beautiful, shortest, most effective ... For solutions on a Turing machine, I suggest using only the characters "space, 0, 1" (do not enter new ones), and write the input and output numbers with four bits (separated by spaces or not) - at your discretion). On Brainfuck, the input string should be entered, and the output should be printed.

UPD Using the built-in or library BigNum is, of course, good, but somehow not very interesting. Let's do without it!

For the seed - a solution in C # (which can not be called neither beautiful, nor short, nor effective):

*Given a string containing a non-negative integer in a hexadecimal system. The number is written in digits 0..9A..F (letters are only large), it is guaranteed that there are no non-digits in the line. You need to get a string containing a decimal notation of such a number. The length of the input string does not exceed 100,000 bytes.*Write solutions in any languages - the most beautiful, shortest, most effective ... For solutions on a Turing machine, I suggest using only the characters "space, 0, 1" (do not enter new ones), and write the input and output numbers with four bits (separated by spaces or not) - at your discretion). On Brainfuck, the input string should be entered, and the output should be printed.

UPD Using the built-in or library BigNum is, of course, good, but somehow not very interesting. Let's do without it!

For the seed - a solution in C # (which can not be called neither beautiful, nor short, nor effective):

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 is l1; } string res; fixed (sbyte * c = m) {res = new string (c, lk, ll-lk); } return res; }