信息学奥赛c++语言:含 k 个 3 的数
输入两个正整数 m 和 k,其中 1<m≤1015,1<k≤15,判断 m 是否恰好含有 k 个 3,如果满足条件,则输出。输入一行,为两个整数 m,km,k,中间用单个空格间隔。
·
题目描述
输入两个正整数 m 和 k,其中 1<m≤1015,1<k≤15,判断 m 是否恰好含有 k 个 3,如果满足条件,则输出 YES,否则,输出 NO。
输入格式
输入一行,为两个整数 m,km,k,中间用单个空格间隔。
输出格式
满足条件,则输出 YES,否则,输出 NO。
输入输出样例
输入
43833 3
输出
YES
代码
// 引入万能头文件,它包含了 C++ 标准库中大多数常用的头文件。
// 不过,它并非标准 C++ 的一部分,某些编译器可能不支持。
#include <bits/stdc++.h>
// 使用标准命名空间 std,这样在后续代码里使用标准库的类和函数时,
// 就无需添加 std:: 前缀,但可能会导致命名冲突。
using namespace std;
int main() {
// 定义两个整型变量
// m 用于存储用户输入的一个整数
// k 用于存储用户输入的数字 3 的期望出现次数
int m, k;
// 从标准输入(通常是键盘)读取两个整数,分别赋值给 m 和 k
cin >> m >> k;
// 检查 m 是否能被 19 整除
if (m % 19 != 0) {
// 如果 m 不能被 19 整除,输出 "NO"
cout << "NO";
// 结束程序,返回 0 表示程序正常退出
return 0;
}
// 定义一个计数器变量 cnt,用于统计 m 中数字 3 出现的次数,初始化为 0
int cnt = 0;
// 进入一个 while 循环,只要 m 不等于 0,就会继续循环
while (m != 0) {
// 获取 m 的个位数,使用取模运算得到
int r = m % 10;
// 检查个位数是否为 3
if (r == 3) {
// 如果个位数是 3,计数器 cnt 加 1
cnt++;
}
// 去掉 m 的个位数,通过整除 10 实现
m /= 10;
}
// 检查 m 中数字 3 出现的次数是否等于期望的次数 k
if (cnt == k) {
// 如果相等,输出 "YES"
cout << "YES";
} else {
// 如果不相等,输出 "NO"
cout << "NO";
}
// 主函数正常结束,返回 0 表示程序成功执行
return 0;
}更多推荐
所有评论(0)