luogu-B3699 [语言月赛202301] 就要 62
GESP二级练习,多层循环和分支练习,难度★★☆☆☆。
luogu-B3699 [语言月赛202301] 就要 62
题目要求
题目描述
给你一个整数 ,你需要判断,这个整数中是否出现过数字 或者能够被 整除。如果是,输出
Yes,否则输出No即可。
输入格式
输入共一行,为一个整数 。
输出格式
输出共一行。
如果 中出现过数字 或者能够被 整除,输出一行
Yes,否则输出一行No。
输入 #1
11624
输出 #1
Yes
输入 #2
12214
输出 #2
Yes
输入 #3
16124
输出 #3
No
输入 #4
62
输出 #4
Yes
说明/提示
样例 1 解释
显然, 中出现了 。
样例 2 解释
容易知道,,所以 可以被 整除。
样例 3 解释
虽然 中出现了 和 ,但是没有出现一个完整的 。这种情况不被叫做【出现 】。
样例 4 解释
显然, 中出现了 ,也是 的倍数。
数据规模与约定
对于 的测试数据,保证 ;
对于 的测试数据,保证 ;
对于 的测试数据,保证 。
题目分析
解题思路
明确题目核心要求:
- 题目给定一个正整数 ,要求判断其是否满足以下两个条件中的任意一个:能被 整除,或者各位数字中出现连续的
62。 - 只要满足其一,即可输出
Yes;如果都不满足则输出No。
- 题目给定一个正整数 ,要求判断其是否满足以下两个条件中的任意一个:能被 整除,或者各位数字中出现连续的
第一步:判断整除条件:
- 使用取余运算符
%进行判断,即由x % 62 == 0的真假来判断 是否能被 整除。 - 此操作仅需要针对输入的原始数字执行一次判断即可。
- 使用取余运算符
第二步:判断是否包含连续数字 62:
- 可以通过循环对数字不断提取末两位和截去末一位的方法来进行验证。
- 在每轮循环中,利用
temp % 100 == 62来验证当前数值的最末两位是不是62。如果遇到则直接满足条件。 - 每次检验后,通过
temp /= 10去掉末尾最后一位数,向左逐个进行遍历。 - 重复执行到整个数全部被处理完(即为 )为止。
示例代码
#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 认证学习微信公众号

最后更新于