Ppb2011 1
var http = require('http');
var url = require('url');
 
var server = http.createServer( 
  function(req, res) 
  {
    // Извлекаем строку запроса
    pathname = decodeURIComponent(url.parse(req.url).pathname).split('/')[1];
    console.log(pathname);
 
    // Если запрос состоит из строки 'kill', завершаем работу сервиса
    if (pathname === 'kill') 
    {
      res.writeHead(200,{"Content-Type": "application/json; charset=UTF-8"});
      res.end(JSON.stringify({server:'Сервис перевода из одной системы счисления в другую', result:'Работа завершена'}));
      server.close('');
      req.connection.destroy('');
      console.log("Работа завершена");
      process.exit('');
      return;
    }
 
    // Парсинг строки запроса
    map=pathname.split(' ');
    console.log(map);
 
    // Основные вычисления
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    // Получаем число, систему счисл. 1, систему счисл. 2
    x=map[0];
    s1=parseInt(map[1]);
    s2=parseInt(map[2]);
 
    // Проверка корректности введенных данных
    if ((s1<2)||(s1>10)||(s2<2)||(s2>10)||wrong(x,s1)) 
    {
    // Если данные введены неверно, возвращаем -1
        result=-1;
    }
    else
    {
        // Если данные введены верно, переводим в систему s2
        val = getVal(x,s1); 
        result = toNewSys(val,s2); 
    }
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
    // Возвращаем информацию о запросе и результат    
    res.writeHead(200,{"Content-Type": "application/json; charset=UTF-8"});
    res.end(JSON.stringify({server:'Сервис перевода из одной системы счисления в другую', result:result}));
    console.log(result)
    });
 
server.listen(8000)
console.log('Сервер стартовал на порту 8000')
 
// Функция, вычисляющая значение числа, представленного в системе s1
function getVal(str, s1)
{
    value=0;
    for(i = 0; i<str.length; i=i+1)
    {
        value = value * s1 + parseInt(str[i]);
    }
    return value;
}
 
// Функция, преобразующая значение value в систему s2
function toNewSys(value, s2)
{
    str="";
   // Пока целое от дления >= s2, повторять деление
   while(value>=s2)
   {
      str=value % s2 + str;
      value=(value-value%s2)/s2;
   }
   return value+str;
}
 
// Функция проверки правильности ввода значения x
// (цифры в x не могут быть больше s1; 
// значение не должно быть больше 2^53-1)
function wrong(x, s1)
{
    i=0;
    while(x[i]!=null)
    {
        if(x[i]>s1-1) return true;
        i=i+1;
    }    
    if(getVal(x,s1)>Math.pow(2,53)-1){return true;}
    return false;
}