1 条题解

  • 0
    @ 2025-8-24 21:14:52

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar chen_zhe
    Aya 敲可爱的~

    搬运于2025-08-24 21:14:51,当前版本为作者最后更新于2025-03-09 13:14:47,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    欢迎报名洛谷网校,期待和大家一起进步!

    本题考察枚举和进制转换。

    本题要求将数字转化为 5,7,95,7,9 进制。我们先回忆一下如何进行进制转换。例如要将一个正整数 xx 转换为 55 进制,我们要做的操作是:

    1. 求出 xx 除以 55 的余数 qq
    2. xx 除以 55,得到的结果向下取整;
    3. 如果 x>0x>0,则回到第一步;
    4. 将得到的余数倒序排列,所得的结果就是 xx 转换成 55 进制的结果;

    因此,一个正整数在 55 进制下的表示没有 00,可以理解成每次除以 55 得到的余数 qq 从来不出现 00。对于 7,97,9 进制的表示也是同理。

    因此,我们可以编写一个函数 bool check(int x, int base),表示正整数 xxbase\mathit{base} 进制下的表示是否不含有 00。返回值为 true,则说明不含有;返回值为 false,则说明含有。

    bool check(int x, int base) {
        while (x) {
            if (x % base == 0)
                return false;
            x /= base;
        }
        return true;
    }
    

    接着在主程序中,只用将枚举的 ii 代入 check 函数三次,即可得到答案:

    for (int i = a; i <= b; i++) {
        if (check(i, 5) && check(i, 7) && check(i, 9))
            ans++;
    }
    
    • 1

    信息

    ID
    8619
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者