Pers.narod.ru. JavaScript. Перевод целых чисел между любыми системами счисления |
Конвертер целых положительных и отицательных чисел между любыми системами счисления с основаниями от 2 до 36 включительно. Незаменимая страница для тестов по информатике :)
При вводе чисел можно использовать большие или маленькие латинские буквы A-Z, цифры 0-9, знак "+" или "-" в первой позиции ввода. Лишние пробелы в начале и конце удаляются автоматически.
Проект 17 на странице мидлетов - реализация в виде приложения для мобильника
Соответствующая программка на Паскале в "Алгоритмах"
Основная часть исходника скрипта приведена ниже (в работающем на странице скрипте могут быть мелкие изменения).
<script type="text/javascript"> var posix='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; function list (name,selected) { document.writeln ('<select name="'+name+'">'); for (var i=2; i<37; i++) { document.writeln ('<option value="'+i+'"'+(i==selected?' selected':'')+'>'+i+'</option>'); } document.writeln ('</select>'); } function trim(string) { return string.replace (/(^\s+)|(\s+$)/g, ""); } function check (number,radix) { var r=true; var l=number.length; for (var i=l-1; i>-1; i--) { var c=number.substring (i,i+1); var p=posix.indexOf(c); if (p>-1) { if (p>=radix) { r=false; break; } } else { r=false; break; } } return r; } function fromdec (ns,radix) { var s=''; var n=parseInt(ns),k; do { k=n%radix; s=posix.substring(k,k+1)+s; n=Math.floor((n-k)/radix); } while (n!=0); return s; } function todec (n,radix) { var l=n.length,r=0,st=1; for (var i=l-1; i>-1; i--) { var c=n.substring (i,i+1); var p=posix.indexOf(c); r+=p*st; st*=radix; } return ''+r; } function go () { var n = trim(document.f1.number.value.toUpperCase()); var r1 = parseInt (document.f1.r1.value); var r2 = parseInt (document.f1.r2.value); var sign = n.substring (0,1); document.getElementById('result').innerHTML = ''; if (n=='') { document.getElementById('result').innerHTML = 'Не введено число'; return; } if (sign=='-' || sign=='+') { document.getElementById('result').innerHTML = sign; n=n.substring (1); } if (!check (n,r1)) { document.getElementById('result').innerHTML += n+': число неверно записано в системе с основанием '+r1; return; } var s=''; if (r1== r2) { document.getElementById('result').innerHTML += n; return; } else if (r1 == 10) s=fromdec (n,r2); else if (r2 == 10) s=todec (n,r1); else { var s2 = todec (n,r1); s = fromdec (s2,r2); } document.getElementById('result').innerHTML += s; } </script> <form name="f1"> <table border="0" width="90%" align="center"> <tr><td width="40%" nowrap><p>Перевести число:</p></td><td> <input type="text" name="number" maxlength="40" size="40" value=""> <tr><td width="40%" nowrap><p>Из системы с основанием:</p></td> <td><script type="text/javascript">list('r1',10);</script></td></tr> <tr><td width="40%" nowrap><p>В систему с основанием:</p></td> <td><script type="text/javascript">list('r2',16);</script></td></tr> <tr><td width="40%" nowrap><p>Результат:</p></td><td><p><div id="result"></div></p></td></tr> <tr><td width="40%" nowrap><p> </p></td><td><input type="button" value="Выполнить" onclick="go();"></td></tr> </table> </form>
гостевая; E-mail |