Подскажите алгоритм сокращения числа
55 повідомлень
#14 років тому
Требуется сделать сокращение чисел:Например, из числа 2703165154265225 получить mTx2X .
В сокращении можно использовать латиницу (большие и малые буквы) и числа.
Подскажите как это можно сделать?
Спасибо.
584 повідомлення
#14 років тому
Точно так же как переводить число в 16ную систему:25 000 000 = 17D7840
соответственно у Вас будет основание (кол-во букв + 10)
3195 повідомлень
#14 років тому
Start;var input = 2703165154265225;
var output = mTx2X;
if ( $output = mTx2X ) then
print Преобразование input успешно. Полученное значение = $output.
end if
exit;
55 повідомлень
#14 років тому
SField, из числа в 16 цифр, получится только в 13 знаков.
Нужно больше сократить.
AlekartRu, вы еще и программировать умеете ?

55 повідомлень
#14 років тому
SField, понял.
т.е. получается перевести число в 62-ричную систему (26 англ. букв * 2 + 10 чисел) , а не в 16-ричную
11416 повідомлень
#14 років тому
AlekartRu, как всегда 5+
659 повідомлень
#14 років тому
Я не понимаю зачем вам это ?А вообще есть допустим 8битная кодировка , тогда переводим число в булев тип и читая за раз 8 бит в цикле ити до конца данных . Ну это метод жестокий , для мазохистов

55 повідомлень
#14 років тому
Xazzzi, для сокращения url.
Есть url такого вида: site.ru/d/1202703165154265225
его я сокращаю в такой
site.ru/d/eGk8z3NtjN
(это уже результат реализации алгоритма от SField)
т.е. сокращение урла на 9 символов
55 повідомлень
#14 років тому
frig, держиДля больших чисел сокращение не будет работать из-за ограничений функции decbin
<?php
function bEncode($str = '') {
$_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=";
$bstr = decbin((int)$str);
$size = strlen($bstr);
$p = ceil($size / 6);
$bstr = str_pad($bstr, $p*6 , '0', STR_PAD_LEFT);
$rez = '';
for ( $i = 0; $i < $p; $i++ ) {
$t = (int) $i * 6;
$str = substr( $bstr, $t, 6);
$rez .= $_keyStr{bindec($str)};
}
return $rez;
}
function bDecode($rez) {
$_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=";
$size = strlen($rez);
$bstr = '';
for($i=0; $i< $size; $i++) {
$t = $rez{$i};
$n = strpos($_keyStr, $t);
$bstr .= str_pad(decbin($n), 6, '0', STR_PAD_LEFT);
}
return bindec($bstr);
}
$val = 265225;
$rez = bEncode($val);
echo 'Сокращение числа: ' . $val . '<br>';
echo 'Сокращенный вариант: ' . $rez . '<br>';
echo 'Обратное преобразование: '. bDecode($rez);
?>
Результат:
Сокращение числа: 265225
Сокращенный вариант: BAwJ
Обратное преобразование: 265225
584 повідомлення
#14 років тому
function smartDec($dec, $arr) {
$ret = '';
do {
$ret = $arr.$ret;
$dec /= count($arr);
} while( $dec >= 1 );
return $ret;
}
$chars = explode(' ','0 1 2 3 4 5 6 7 8 9 A B C D E F');
echo smartDec(15, $chars);