Non-decimal radices/Convert: Difference between revisions
Content added Content deleted
(→{{header|REXX}}: separated doc from program, added more error checking, added better error messages, add/changed comments, expanded support for larger numbers.) |
(Add Nimrod) |
||
Line 1,342: | Line 1,342: | ||
at RNonDecRadixConvert.main(RNonDecRadixConvert.nrx:57) |
at RNonDecRadixConvert.main(RNonDecRadixConvert.nrx:57) |
||
</pre> |
</pre> |
||
=={{header|Nimrod}}== |
|||
<lang nimrod>import strutils |
|||
proc reverse(a: string): string = |
|||
result = newString(a.len) |
|||
for i, c in a: |
|||
result[a.high - i] = c |
|||
const digits = "0123456789abcdefghijklmnopqrstuvwxyz" |
|||
proc toBase[T](num: T, base: range[2..36]): string = |
|||
if num == 0: return "0" |
|||
result = "" |
|||
if num < 0: result.add '-' |
|||
var tmp = abs(num) |
|||
var s = "" |
|||
while tmp > 0: |
|||
s.add digits[int(tmp mod base)] |
|||
tmp = tmp div base |
|||
result.add s.reverse |
|||
proc fromBase(str: string, base: range[2..36]): BiggestInt = |
|||
var str = str |
|||
let first = if str[0] == '-': 1 else: 0 |
|||
for i in first .. str.high: |
|||
let c = str[i].toLower |
|||
assert c in digits[0 .. <base] |
|||
result = result * base + digits.find c |
|||
if first == 1: result *= -1 |
|||
echo 26.toBase 16 |
|||
echo "1a".fromBase 16</lang> |
|||
Output: |
|||
<pre>1a |
|||
26</pre> |
|||
=={{header|OCaml}}== |
=={{header|OCaml}}== |