找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3821

积分

0

好友

527

主题
发表于 昨天 08:32 | 查看: 6| 回复: 0

GESP二级的练习,常常会考察对多层循环和分支判断的综合运用能力。今天我们来分析一道来自洛谷“语言月赛”的题目——luogu-B3699 [语言月赛202301] 就要 62,它的难度并不高,但对于巩固基础逻辑和数字处理技巧很有帮助。

题目描述

给你一个整数 x,你需要判断,这个整数中是否出现过数字 或者 能够被 62 整除。如果是,输出 Yes,否则输出 No 即可。

输入格式

输入共一行,为一个整数 x

输出格式

输出共一行。
如果 x 中出现过数字 62 或者能够被 62 整除,输出一行 Yes,否则输出一行 No

输入 #1

11624

输出 #1

Yes

输入 #2

12214

输出 #2

Yes

输入 #3

16124

输出 #3

No

输入 #4

62

输出 #4

Yes

说明/提示

样例 1 解释
显然,11624 中出现了 62

样例 2 解释
容易知道,12214 / 62 = 197,所以 12214 可以被 62 整除。

样例 3 解释
虽然 16124 中出现了 62,但是没有出现一个完整的 62。这种情况不被叫做【出现 62】。

样例 4 解释
显然,62 中出现了 62,也是 62 的倍数。

数据规模与约定

对于 $100\%$ 的测试数据,保证 $1 \le x \le 10^{18}$


解题思路分析

这道题目的要求非常明确:对于一个给定的正整数 x,只需满足“能被62整除”或“其十进制表示中包含连续的‘62’”这两个条件中的任意一个,即输出 Yes

我们的解题思路可以清晰地分为两步,这在处理许多条件判断类问题时是一个很好的编程思维模式。

  1. 第一步:判断整除条件
    这是最简单直接的一步。利用取余运算符 % 即可完成。如果 x % 62 == 0 成立,那么无需进行后续判断,直接输出 Yes 并结束程序。

  2. 第二步:判断是否包含连续数字“62”
    如果第一步不成立,我们就需要检查数字的每一位。一个高效的方法是:

    • 用一个临时变量 temp 来操作原始数字 x
    • 在循环中,不断检查 temp % 100 的结果是否等于 62temp % 100 可以取出 temp 的最后两位数字。
    • 如果等于 62,说明找到了,输出 Yes 并结束。
    • 如果不等于,则通过 temp /= 10 去掉 temp 的最后一位(相当于将数字整体右移一位),继续检查新的最后两位。
    • 重复此过程,直到 temp 变为 0(所有数位都已检查完毕)为止。

如果以上两个条件都不满足,则最终输出 No

这个思路完美地覆盖了题目的所有要求,并且逻辑清晰,易于用 C/C++ 代码实现。

示例代码 (C++)

下面是根据上述思路编写的C++代码。代码中包含了清晰的注释,帮助你理解每一步的操作。

#include<iostream>
using namespace std;
int main(){
    long long x;
    cin >> x;
    // 条件一:判断原始数字是否能被 62 整除
    if (x % 62 == 0) {
        cout << "Yes" << endl;
        return 0;
    }
    // 条件二:通过循环逐位判断是否包含连续的 "62"
    long long temp = x;
    while (temp > 0) {
        // 判断当前数字末两位是否为 62
        if (temp % 100 == 62) {
            cout << "Yes" << endl;
            return 0;
        }
        // 去掉末尾一位数字,继续向左检查
        temp /= 10;
    }
    // 两个条件均未满足,输出 No
    cout << "No" << endl;
    return 0;
}

代码要点解析

  • 数据类型:由于 x 最大可达 $10^{18}$,超出了 int 型的范围,因此我们使用 long long 类型来存储。
  • 提前返回:在判断出满足条件后,使用 return 0; 直接结束 main 函数,这是一种避免使用冗余标志变量的简洁写法。
  • 循环条件while (temp > 0) 确保当数字的所有位都被检查过后(temp 变成 0)循环停止。
  • 取位技巧temp % 100temp /= 10 是处理整数各位数字的经典组合,需要熟练掌握。

总结与延伸

这道题本质上是条件判断与基础算法中数字位运算的结合。通过解决它,你可以巩固以下知识点:

  1. 取模运算 (%) 的应用。
  2. 整数除法的截断特性在数字分解中的应用。
  3. 循环与条件分支的嵌套使用。
  4. 问题拆解的思路:将“或”关系的复杂条件,分解为独立的、可按顺序检查的简单子问题。

在准备 GESP 或类似认证时,多练习此类题目能有效提升你的逻辑思维和编码熟练度。你可以尝试在云栈社区与其他开发者交流更多解题技巧和学习资源,共同进步。




上一篇:干货总结:12个单片机电路设计与调试中的典型问题与解决思路
下一篇:C++静态对象销毁时机全解:从原理到C++17最佳实践
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-10 09:33 , Processed in 0.525979 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表