banner
NEWS LETTER

「知识物料」非等长进制数

Scroll down

「知识物料」非等长进制数

废话:这几天在写仿真代码的时候发现的一个应用场景,和数学相关,当然这个问题很简单,也就是数学系的人的课后小作业水平,为了以后可能方便使用于是写了这篇笔记记录一下。

问题定义

有这样一个进制系统构成的数,“个位”上的进率是 $d_{1}$ ,“十位”上的进率是 $d_{2}$ ,“百位”上的进率是 $d_{3}$ ,“千位”上的进率是 $d_{4}$ ,……称其为 $D$ 进制数。讨论如何将任意一个 $D$ 进制数转化为十进制数,以及如何将任意一个十进制数转化为 $D$ 进制数。

自定义进制

问题分析

设数位 $x$ 上的进制为 $d_{x}$ ,首先我们需要一套符号体系来表示任意数位 $x$ 上的数值,就像需要 $0\to 9$ 这十个符号去表示十进制各个数位上的数值,定义符号 $S_{0}\to S_{max}$ 来表示 $D$ 进制数中各个数位上的数值。

数位 $x$ 上的进制为 $d_{x}$ ,就是用前 $d_{x}$ 个符号 $S_{0}\to S_{d_{x}-1}$ 来表示该数位上的数值,需要再进一步增加该位数值时,则向上一位 $d_{x+1}$ 进位。

那么如何将 $D$ 进制数转十进制就按照上述规则得到公式:

$$
\left( \cdots s_{x} \cdots s_{3}s_{2}s_{1}\right){D} = \left( \cdots +s{x}\times d_{x} + \cdots + s_{3}\times d_{3} + s_{2}\times d_{2} + s_{1}\times d_{1} \right){10}
$$
其中,符号 $s
{x}$ 表示数位 $x$ 上的数值变量,有 $s_{x}\in \left{ S_{0},\dots,S_{max} \right}$

[!example] 实例
题目:假设有个三位的 $D$ 进制数,为了表述方便仍然沿用十进制符号 $0\to 9$ ,每个数位上的进率分别为 $d_{3}=2,d_{2}=5,d_{1}=4$ ,转化如下所示的数为十进制数:
(1) $(143){D}$ ;(2) $(22){D}$
解题:显然有公式
(1) $(143){D} = (1\times \left{ 5\times4 \right}+4\times \left{ 4 \right}+3\times \left{ 1 \right}){10}=(39){10}$ ;
(2) $(22)
{D} = (2\times \left{ 4 \right}+2\times \left{ 1 \right}){10}=(10){10}$

接下来分析如何将十进制数 $(X){10}$ 转换为 $D$ 进制数。问题的关键在于如何求解出各个数位上的数值 $s{x}$ ,可以从上述过程逆向推理。如果 $x$ 位上计数多一个单位,则必须前 $x-1$ 位都达到满值,即 $d_{x-1}\times d_{x-2}\times \cdots d_{3}\times d_{2}\times d_{1}$ ,要求解数位 $x$ 上的值 $s_{x}$ 则有:

$$
s_{x}=\left\lfloor \frac{(X){10} }{d{x-1}\times d_{x-2}\times \cdots d_{3}\times d_{2}\times d_{1}} \right\rfloor
$$
其中 $\lfloor \cdot \rfloor$ 表示向下取整。再进一步求解下一位 $x-1$ 的数值 $s_{x-1}$ 则有:

$$
s_{x-1}=\left\lfloor \frac{(X){10} \ \text{mod}\ (d{x-1}\times d_{x-2}\times \cdots d_{3}\times d_{2}\times d_{1})}{d_{x-2}\times d_{x-3}\times \cdots d_{3}\times d_{2}\times d_{1}} \right\rfloor =\left\lfloor \frac{(X){10} -s{x} \times (d_{x-1}\times d_{x-2}\times \cdots d_{3}\times d_{2}\times d_{1})}{d_{x-2}\times d_{x-3}\times \cdots d_{3}\times d_{2}\times d_{1}} \right\rfloor
$$

其中 $A\ \text{mod}\ B =C$ 表示 $A$ 除以 $B$ 的余数为 $C$ 。依次类推直到求解出所有的数值。

[!example] 实例
题目:假设有个三位的 $D$ 进制数,为了表述方便仍然沿用十进制符号 $0\to 9$ ,每个数位上的进率分别为 $d_{3}=2,d_{2}=5,d_{1}=4$ ,转化如下所示的数为 $D$ 进制数:
(1) $(39){10}$ ;(2) $(10){10}$
解题
(1)依次求解数位 $x$ 的数值 $s_{x}$ :
当 $x=3$ 时:$s_{3}=\left\lfloor \frac{(39){10} }{5\times 4} \right\rfloor =(1){D}$ ;
当 $x=2$ 时:$s_{2}=\left\lfloor \frac{(39){10}-1\times \left{ 5\times 4 \right} }{4} \right\rfloor =(4){D}$ ;
当 $x=1$ 时:$s_{1}=\left\lfloor \frac{(39){10}-1\times \left{ 5\times 4 \right}-4\times \left{ 4 \right} }{1} \right\rfloor =(3){D}$ ;
于是得到 $(39){10}=(143){D}$ 。
(2)依次求解数位 $x$ 的数值 $s_{x}$ :
当 $x=2$ 时:$s_{2}=\left\lfloor \frac{(10){10} }{4} \right\rfloor =(2){D}$ ;
当 $x=1$ 时:$s_{1}=\left\lfloor \frac{(10){10}-2\times \left{ 4 \right} }{1} \right\rfloor =(2){D}$ ;
于是得到 $(10){10}=(22){D}$ 。

其他文章