1 条题解

  • 0
    @ 2025-8-24 21:18:41

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 览遍千秋
    将伤与泪汇成力化作拳

    搬运于2025-08-24 21:18:40,当前版本为作者最后更新于2025-05-20 05:53:46,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    Source and Knowledge

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

    循环结构


    文字题解

    数位操作基础

    【数位分解】

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

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

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

    【数位重建】

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

    【数位翻转】

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

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

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

    第二数位翻转

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

    • 通过 xmod100x\bmod 100 获得最低两位
    • 通过 100×x+p100\times x + p 重建
    int ans = 0;
    while(x) {
        ans = ans * 100 + x % 100;
        x /= 100;
    }
    
    • 1

    信息

    ID
    12296
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者