你好。
我什至不知道如何提出正确的问题。重点是这个。我试过并且正在尝试编写一个函数来计算某个数字中有多少个唯一数字。我希望该函数输出如下列表所示的内容:
- $nb = 0; //输出应该是0
- $nb = 1; //输出应该是1
- $nb = 2; //输出应该是2
- ...
- $nb = 13; //输出应该是13
- $nb = 14; // 输出应该是 0 0
- $nb = 15; // 输出应该是 0 1
- $nb = 16; // 输出应该是 0 2
- ...
- $nb = 27; // 输出应该是 0 13
- $nb = 28; // 输出应该是 1 0
- $nb = 29; // 输出应该是 1 1
- $nb = 30; // 输出应该是 1 2
- ...
- $nb = 196; // 输出应该是 0 0 0
- $nb = 197; // 输出应该是 0 0 1
- $nb = 198; // 输出应该是 0 0 2
- ...
- $nb = 392; // 输出应该是 1 0 0
- $nb = 393; // 输出应该是 1 0 1
- $nb = 393; // 输出应该是 1 0 2
- ...
- $nb = 2743; // 输出应该是 13 13 13
- $nb = 2744; // 输出应该是 0 0 0 0
- $nb = 2745; // 输出应该是 0 0 0 1
- $nb = 2746; // 输出应该是 0 0 0 2
- ...
我得到某种逻辑错误,当你输入数字 392 时,它会显示1 14 -196
,当输入 393 时,1 14 -195
嗯,等等。并且当你在变量中输入一个更大和更小的数字时$nb
,也会显示逻辑错误。例如,当我输入数字 15 时,我得到-0 -12 -181
. 我试着动态地做这一切,但在 5 天内我几乎没有动过任何地方。
这是函数本身:
// на это число делю
$count = 14;
// число
// минимальное возможное число при $count'е 14 может быть только 196
// максимальное возможное число при $count'е 14 может быть только 391
$nb = 391;
// предыдущая так сказать граница
$pr_nb = explode('.', log($numb, $count))[0];
$pr_nb = pow($count, $pr_nb);
// первый остаток
$balance1 = $nb - $pr_nb;
// второй остаток, предпоследнее число
$balance2 = explode('.', $balance1 / $count)[0];
$balance2a = explode('.', log($balance2, $count))[0];
// третий остаток, последнее число
$balance3 = $balance1 - (explode('.', $balance2 * $count)[0] * explode('.', log($balance1, $count))[0]);
// четвёртый остаток, это 3-я цифра с конца
$balance4 = explode('.', $balance1 / (pow($count, 2)))[0];
echo '<h1 style="color:red;">['.$balance4.'] ['.$balance2.'] ['.$balance3.']</h1>';
原理是如果变量$nb
中的数字在14的2次方的值之间,那么这个数字会写成3个数字(从0 0 0
到13 13 13
)。如果是 3 次方,则为 4(从0 0 0 0
到13 13 13 13
),如果为 4 次方,则为 5 位数(从0 0 0 0 0
到13 13 13 13 13
),依此类推。
我知道代码很糟糕。因此,我请求你的帮助。
到这里,好像结果和真相差不多,如果满足14位数字: