- lishilin 的博客
常用代码片段 - GESP1级
- @ 2025-4-17 17:15:04
取数位
% 运算符用来取数字, / 运算符用来丢掉数字,具体取(丢)多少,看有多少个 0。
例如 1234 % 100,表示取出来后两位, 1234 / 100,表示丢掉后两位。
数学原理
每一个数字都可以拆解成 $a_n \times 10^n + a_{n-1} \times 10^{n-1} + a_{n-2} \times 10^{n-2} + \cdots +a_0 \times 10^0$ 的形式。
例如 1234:
$$1234 = 1 \times 1000 + 2 \times 100 + 3 \times 10 + 4 \times 10^0$$如果对 1234 / 10:
$$1000 = 100 \times 10 \\ 100 = 10 \times 10\\ 10 = 10$$可以发现,都是关于 10 的倍数,所以会进入商的部分,而不会进入余数部分,那么千、百、十位上的数字都会进入商,而个位会进入余数部分。
固定取数位
根据数字的范围,确定他的位数个数,例如 ,表示 x 一定是两位数,只有十位和个位。
例如 ,表示 x 一定是三位数,只有百位、十位和个位。
不固定取数位
不知道数字范围,判定条件更改为:当前这个数字是否变成0.
如果当前数字变成 0,说明这个数字每一个位数都取出来了,已经取干净了。
$$1234 \Rightarrow 123 \Rightarrow 12 \Rightarrow 1 \Rightarrow 0$$每次做的事情,都是 % 10 取出来当前的个位,再 / 10 丢掉当前的个位,使得高位右移动。
可以使用 while 循环来处理,属于条件判断,根据条件来判定循环是否执行,而不是固定次数循环。
代码模板如下:
while (n != 0) {
int x = n % 10; // 取出来个位数
n /= 10; // 丢掉当前个位数
}
变种题型
- 确定一个数字的长度,换句话说统计循环执行次数
- 统计数位和
- 统计某个数字出现了多少次
实质都是模板代码做了简单修改,加入分支结构进行判断。
数学原理没有改变,只是改变了记录的信息。