十进制
一个十进制数 372,可以通过如下方式单独取出 3、7、2 三个数
372
%
10
=
2
372
/
10
%
10
=
7
372
/
10
/
10
%
10
=
3
\begin{aligned} 372 \% 10 = 2 \\ 372 / 10 \% 10 = 7 \\ 372 / 10 / 10 \% 10 = 3 \end{aligned}
372%10=2372/10%10=7372/10/10%10=3
在十进制系统中,372 可以看成 10 × 10 × 10 坐标系中的某个点,乘法表示一种维度的提升,所以这是一个三维的系统,取模运算可以提取当前维度的值,除法运算可以降低维度,通过这两者的组合,可以提取出任意一个维度的坐标值。
非十进制
假设是一个 7进制系统,那么 372 可以表示为 7 × 7 × 7 × 7 坐标系中的某个点(因为
7
3
<
372
7^3 < 372
73<372),通过相同的方法(取模用于提取当前维度的值,除法用于降低维度),可以提取出每个维度中的坐标值。
372
%
7
=
1
372
/
7
%
7
=
4
372
/
7
/
7
%
7
=
0
372
/
7
/
7
/
7
%
7
=
1
\begin{aligned} 372 \% 7 = 1 \\ 372 / 7 \% 7 = 4 \\ 372 / 7 / 7 \% 7 = 0\\ 372 / 7 / 7 / 7 \% 7 = 1 \end{aligned}
372%7=1372/7%7=4372/7/7%7=0372/7/7/7%7=1
所以最终结果是1041(从下往上取值)。
不规则的系统
无论十进制还是七进制,每个维度的值都是相同的,如果有一个 m × n 的坐标系,该如何确定某个值在每个坐标上的值呢?可以使用同样的方法,假设一个 8 × 9 的坐标系,可以把 8 当作维度信息,9 当作进制信息。对于某个具体的数,64,我们先取 最低位的值,通过 64 % 9 = 1 64 \% 9=1 64%9=1 得到,然后在取另一个维度的值,通过降维再取模得到 64 / 9 % 8 = 7 64/9\%8=7 64/9%8=7,所以 64 对应的坐标值为71。表示 64 = 7 ∗ 9 1 + 1 ∗ 8 0 64 = 7 * 9^1 + 1*8^0 64=7∗91+1∗80。如果是一个 9 × 8 的坐标系,则 64 对应的值为 80 = 8 × 8 1 + 0 × 9 0 80=8\times8^1+0\times9^0 80=8×81+0×90。所以取的坐标系不同,所得到的值也不同。
总结
对于一个
a
1
×
a
2
×
.
.
.
×
a
n
a_1 \times a_2 \times ... \times a_n
a1×a2×...×an的坐标系,通过如下方式确定某个坍缩后的值
X
X
X 在该坐标系中的取值
(
A
1
,
A
2
,
.
.
.
,
A
n
)
(A_1,A_2,...,A_n)
(A1,A2,...,An)
A
n
=
X
%
a
n
A
n
−
1
=
X
/
a
n
%
a
n
−
1
.
.
.
A
1
=
X
/
a
n
/
a
n
−
1
/
.
.
.
/
a
2
%
a
1
\begin{aligned} A_n &= X \%a_n \\ A_{n-1}&=X/a_n\%a_{n-1} \\ ... \\ A_1&=X/a_n/a_{n-1}/.../a_2\%a_1 \end{aligned}
AnAn−1...A1=X%an=X/an%an−1=X/an/an−1/.../a2%a1
除法运算可以降低维度,取模运算可以提取当前维度的值,通过这两者的组合,可以最终确定某个值 X 在该坐标系中的位置