Nickolay.info. 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>&nbsp;</p></td><td><input type="button" value="Выполнить" onclick="go();"></td></tr>
 </table>
</form>

Рейтинг@Mail.ru
вверх гостевая; E-mail