假设,有3个整数变量:
$n1 = 8559800019119;
$n2 = 99901;
$n3 = 911861;
$result = ????????; // 如何将3个整数变成一个整数,并在以后能还原成这3个整数//--------------------$r = ??????($result); // 如何这个整数,还原成3个整数
$r1 = 8559800019119;
$r2 = 99901;
$r3 = 911861;这3个整数如何处理,才能变成一个数字,并且在其它页面里接收到它,并还原成这3个整数?只能用数学运算,不能拼接成字符串或数组
$n1 = 8559800019119;
$n2 = 99901;
$n3 = 911861;
$result = ????????; // 如何将3个整数变成一个整数,并在以后能还原成这3个整数//--------------------$r = ??????($result); // 如何这个整数,还原成3个整数
$r1 = 8559800019119;
$r2 = 99901;
$r3 = 911861;这3个整数如何处理,才能变成一个数字,并且在其它页面里接收到它,并还原成这3个整数?只能用数学运算,不能拼接成字符串或数组
思路大体就是 获取这个字符后 截取第一个"0"之前的数字(你需要的第一整数的位数) 得到这个位数后第一个"0"后这些个位数后就是第一个整数了 再把这些字符截除,依次递归 就会得到所有的整数了
这是方法: function sub($str, &$arr = [])
{
// 第一个整数的长度
$lenght = substr($str, '0', strpos($str, '0'));
// 取出第一整数
$number = substr($str, strpos($str, '0')+1, $lenght);
// 判断剩余字符的第一个字符是否为0
for ($i=0; $i<strlen($number); $i++) {
if ($number[0]==0) {
$lenght *= 10;
$number = substr($str, strpos($str, '0')+1+($i+1), $lenght);
// 截取除去第一数字剩余的字符串位数
$surplus_num = $lenght+strpos($str, '0')+1+($i+1)-strlen($str);
$str = substr($str, $lenght+strpos($str, '0')+1+($i+1)-strlen($str));
} else {
if ($i == 0) {
// 截取除去第一数字剩余的字符串位数
$surplus_num = $lenght+strpos($str, '0')+1-strlen($str);
$str = substr($str, $lenght+strpos($str, '0')+1-strlen($str));
}
break;
}
}
// 获取整数
array_push($arr, $number);
// 递归
if ($surplus_num) {
$this->sub($str, $arr);
}
return $arr;
}
$n1 = 8000000001;
$n2 = 9990111;
$n3 = 91186122;
$result = [$n1, $n2, $n3, 111, 211];
$str = '';
foreach ($result as $item) {
$str = $str.strlen($item).'0'.$item;
}
// 调用递归函数
var_dump($this->sub($str));
除非你使用的是 64位php由于前题存在不确定性,所以不会有肯定的答案不过
8559800019119999019118611305063
3130506855980001911999901911861
都可以作为备选
在计算机处理整数的范围里,更简单的 就用 y=ax+b 一个代数式也能解决问题。
<?php $n1 = 8559800019119;
$n1_s = strlen($n1);
$n2 = 99901;
$n2_s = strlen($n2);
$n3 = 911861;
$n3_s = strlen($n3);
$result = $n1.$n2.$n3; echo $result;
echo "<br>";
$n1 = substr($result,0,$n1_s);
echo $n1;
echo "<br>";
$n2 = substr($result,$n1_s,$n2_s);
echo $n2;
echo "<br>";
$n3 = substr($result,$n1_s+$n2_s);
echo $n3;
echo "<br>";