末日之光

· · 题解

Source and Knowledge

2025 年 5 月语言月赛,由洛谷网校提供。

循环结构

文字题解

数位操作基础

【数位分解】

数位分解是处理整数的常用技巧。对于整数 x,通过 x\bmod 10,可以得到 x 的最低位。将 x 除以 10,可以去掉 x 的最低位。

int digits[MAXN], cnt;
while(x) {
    digits[++cnt] = x % 10;
    x /= 10;
}

以上代码可以将 x 的数位按照低位在前,存储到 digits 中。

【数位重建】

如果我们需要将数位 p(0 \le p \le 9) 接到整数 x 的最低位后,可以通过计算 10\times x+p 完成。

【数位翻转】

以 NOIP 2011 普及组 数字反转 为例。通过数位分解得到的数位,是按照低位在前,高位在后的顺序的。直接应用数位重建,即可完成数位翻转。

下面的代码假设 x 为正数。

int ans = 0;
while(x) {
    ans = ans * 10 + x % 10;
    x /= 10;
}

第二数位翻转

本题定义的第二数位,处理方式与上述相同,只是需要同时分解出两位的数位。这可以把上述的操作修改为下列操作

int ans = 0;
while(x) {
    ans = ans * 100 + x % 100;
    x /= 100;
}