luogu-B3699 [语言月赛202301] 就要 62

luogu-B3699 [语言月赛202301] 就要 62

GESP二级练习,多层循环和分支练习,难度★★☆☆☆。

luogu-B3699 [语言月赛202301] 就要 62

题目要求

题目描述

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

输入格式

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

输出格式

输出共一行。

如果 xx 中出现过数字 6262 或者能够被 6262 整除,输出一行 Yes,否则输出一行 No

输入 #1

11624

输出 #1

Yes

输入 #2

12214

输出 #2

Yes

输入 #3

16124

输出 #3

No

输入 #4

62

输出 #4

Yes

说明/提示

样例 1 解释

显然,1162411624 中出现了 6262

样例 2 解释

容易知道,12214=62×19712214 = 62 \times 197,所以 1221412214 可以被 6262 整除。

样例 3 解释

虽然 1612416124 中出现了 6622,但是没有出现一个完整的 6262。这种情况不被叫做【出现 6262】。

样例 4 解释

显然,6262 中出现了 6262,也是 6262 的倍数。

数据规模与约定

对于 20%20\% 的测试数据,保证 x10x \leq 10
对于 40%40\% 的测试数据,保证 x<100x < 100
对于 100%100\% 的测试数据,保证 1x10181 \leq x \leq 10 ^ {18}


题目分析

解题思路

  1. 明确题目核心要求

    • 题目给定一个正整数 xx,要求判断其是否满足以下两个条件中的任意一个:能被 6262 整除,或者各位数字中出现连续的 62
    • 只要满足其一,即可输出 Yes;如果都不满足则输出 No
  2. 第一步:判断整除条件

    • 使用取余运算符 % 进行判断,即由 x % 62 == 0 的真假来判断 xx 是否能被 6262 整除。
    • 此操作仅需要针对输入的原始数字执行一次判断即可。
  3. 第二步:判断是否包含连续数字 62

    • 可以通过循环对数字不断提取末两位和截去末一位的方法来进行验证。
    • 在每轮循环中,利用 temp % 100 == 62 来验证当前数值的最末两位是不是 62。如果遇到则直接满足条件。
    • 每次检验后,通过 temp /= 10 去掉末尾最后一位数,向左逐个进行遍历。
    • 重复执行到整个数全部被处理完(即为 00)为止。

示例代码

#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;
}

本文由coderli.com原创,按照CC BY-NC-SA 4.0 进行授权

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

luogu-”系列题目可在 洛谷题库 在线评测。

bcqm-”系列题目可在 编程启蒙题库 在线评测。

GESP/CSP认证交流QQ群: 688906745

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
最后更新于